Ver código fonte

Add rpc proxy flags

tags/0.9
9seconds 7 anos atrás
pai
commit
5e82dce22e
1 arquivos alterados com 51 adições e 0 exclusões
  1. 51
    0
      mtproto/rpc/rpc_proxy_flags.go

+ 51
- 0
mtproto/rpc/rpc_proxy_flags.go Ver arquivo

@@ -0,0 +1,51 @@
1
+package rpc
2
+
3
+import (
4
+	"bytes"
5
+	"encoding/binary"
6
+
7
+	"github.com/9seconds/mtg/mtproto"
8
+)
9
+
10
+type RPCProxyRequestFlags uint32
11
+
12
+const (
13
+	RPCProxyRequestFlagsHasAdTag     RPCProxyRequestFlags = 0x8
14
+	RPCProxyRequestFlagsEncrypted                         = 0x2
15
+	RPCProxyRequestFlagsMagic                             = 0x1000
16
+	RPCProxyRequestFlagsExtMode2                          = 0x20000
17
+	RPCProxyRequestFlagsIntermediate                      = 0x20000000
18
+	RPCProxyRequestFlagsAbdridged                         = 0x40000000
19
+	RPCProxyRequestFlagsQuickAck                          = 0x80000000
20
+)
21
+
22
+var rpcProxyRequestFlagsEncryptedPrefix [8]byte
23
+
24
+func (r RPCProxyRequestFlags) Bytes() []byte {
25
+	converted := make([]byte, 4)
26
+	binary.LittleEndian.PutUint32(converted, uint32(r))
27
+
28
+	return converted
29
+}
30
+
31
+func NewRPCRproxyRequestFlags(connectionType mtproto.ConnectionType, quickAck bool, message []byte) RPCProxyRequestFlags {
32
+	flags := RPCProxyRequestFlagsHasAdTag
33
+	flags |= RPCProxyRequestFlagsMagic
34
+	flags |= RPCProxyRequestFlagsExtMode2
35
+
36
+	switch connectionType {
37
+	case mtproto.ConnectionTypeAbridged:
38
+		flags |= RPCProxyRequestFlagsAbdridged
39
+	case mtproto.ConnectionTypeIntermediate:
40
+		flags |= RPCProxyRequestFlagsIntermediate
41
+	}
42
+
43
+	if quickAck {
44
+		flags |= RPCProxyRequestFlagsQuickAck
45
+	}
46
+	if bytes.HasPrefix(message, rpcProxyRequestFlagsEncryptedPrefix[:]) {
47
+		flags |= RPCProxyRequestFlagsEncrypted
48
+	}
49
+
50
+	return flags
51
+}

Carregando…
Cancelar
Salvar