Small refactorings of rpc package

This commit is contained in:
9seconds
2018-07-05 10:37:05 +03:00
parent a7eb29cc94
commit 0738631ef8
6 changed files with 91 additions and 128 deletions
+18 -26
View File
@@ -11,22 +11,11 @@ import (
"github.com/9seconds/mtg/mtproto"
)
const (
rpcProxyRequestConnectionIDLength = 8
rpcProxyRequestIPPortLength = 16 + 4
)
var (
rpcProxyRequestTag = []byte{0xee, 0xf1, 0xce, 0x36}
rpcProxyRequestExtraSize = []byte{0x18, 0x00, 0x00, 0x00}
rpcProxyRequestProxyTag = []byte{0xae, 0x26, 0x1e, 0xdb}
)
type RPCProxyRequest struct {
Flags RPCProxyRequestFlags
ConnectionID [rpcProxyRequestConnectionIDLength]byte
OurIPPort [rpcProxyRequestIPPortLength]byte
ClientIPPort [rpcProxyRequestIPPortLength]byte
ConnectionID []byte
OurIPPort []byte
ClientIPPort []byte
ADTag []byte
Options *mtproto.ConnectionOpts
}
@@ -43,13 +32,13 @@ func (r *RPCProxyRequest) Bytes(message []byte) []byte {
flags |= RPCProxyRequestFlagsEncrypted
}
buf.Write(rpcProxyRequestTag)
buf.Write(RPCTagProxyRequest)
buf.Write(flags.Bytes())
buf.Write(r.ConnectionID[:])
buf.Write(r.ClientIPPort[:])
buf.Write(r.OurIPPort[:])
buf.Write(rpcProxyRequestExtraSize)
buf.Write(rpcProxyRequestProxyTag)
buf.Write(RPCProxyRequestExtraSize)
buf.Write(RPCProxyRequestProxyTag)
buf.WriteByte(byte(len(r.ADTag)))
buf.Write(r.ADTag)
buf.Write(bytes.Repeat([]byte{0x00}, buf.Len()%4))
@@ -69,23 +58,26 @@ func NewRPCProxyRequest(clientAddr, ownAddr *net.TCPAddr, opts *mtproto.Connecti
}
request := RPCProxyRequest{
Flags: flags,
ADTag: adTag,
Options: opts,
Flags: flags,
ADTag: adTag,
Options: opts,
ConnectionID: make([]byte, 8),
ClientIPPort: make([]byte, 16+4),
OurIPPort: make([]byte, 16+4),
}
if _, err := rand.Read(request.ConnectionID[:]); err != nil {
if _, err := rand.Read(request.ConnectionID); err != nil {
return nil, errors.Annotate(err, "Cannot generate connection ID")
}
port := make([]byte, 4)
port := [4]byte{}
copy(request.ClientIPPort[:16], clientAddr.IP.To16())
binary.LittleEndian.PutUint32(port, uint32(clientAddr.Port))
copy(request.ClientIPPort[16:], port)
binary.LittleEndian.PutUint32(port[:], uint32(clientAddr.Port))
copy(request.ClientIPPort[16:], port[:])
copy(request.OurIPPort[:16], ownAddr.IP.To16())
binary.LittleEndian.PutUint32(port, uint32(ownAddr.Port))
copy(request.OurIPPort[16:], port)
binary.LittleEndian.PutUint32(port[:], uint32(ownAddr.Port))
copy(request.OurIPPort[16:], port[:])
return &request, nil
}