FILE / ScuroNeko/mtg

mtproto/rpc/rpc_proxy_flags.go

Исходный файл и его история в репозитории.
FILE 5e82dce22e7a7802297a19e25975734552dcf784
Files
mtg/mtproto/rpc/rpc_proxy_flags.go
T
2018-07-01 13:17:03 +03:00

52 lines
1.4 KiB
Go

package rpc
import (
"bytes"
"encoding/binary"
"github.com/9seconds/mtg/mtproto"
)
type RPCProxyRequestFlags uint32
const (
RPCProxyRequestFlagsHasAdTag RPCProxyRequestFlags = 0x8
RPCProxyRequestFlagsEncrypted = 0x2
RPCProxyRequestFlagsMagic = 0x1000
RPCProxyRequestFlagsExtMode2 = 0x20000
RPCProxyRequestFlagsIntermediate = 0x20000000
RPCProxyRequestFlagsAbdridged = 0x40000000
RPCProxyRequestFlagsQuickAck = 0x80000000
)
var rpcProxyRequestFlagsEncryptedPrefix [8]byte
func (r RPCProxyRequestFlags) Bytes() []byte {
converted := make([]byte, 4)
binary.LittleEndian.PutUint32(converted, uint32(r))
return converted
}
func NewRPCRproxyRequestFlags(connectionType mtproto.ConnectionType, quickAck bool, message []byte) RPCProxyRequestFlags {
flags := RPCProxyRequestFlagsHasAdTag
flags |= RPCProxyRequestFlagsMagic
flags |= RPCProxyRequestFlagsExtMode2
switch connectionType {
case mtproto.ConnectionTypeAbridged:
flags |= RPCProxyRequestFlagsAbdridged
case mtproto.ConnectionTypeIntermediate:
flags |= RPCProxyRequestFlagsIntermediate
}
if quickAck {
flags |= RPCProxyRequestFlagsQuickAck
}
if bytes.HasPrefix(message, rpcProxyRequestFlagsEncryptedPrefix[:]) {
flags |= RPCProxyRequestFlagsEncrypted
}
return flags
}