mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 13:54:02 +03:00
FILE / ScuroNeko/mtg
mtproto/rpc/handshake_response.go
Исходный файл и его история в репозитории.
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package rpc
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"github.com/juju/errors"
|
|
)
|
|
|
|
// HandshakeResponse defines data structure which is used for storage of
|
|
// handshake response.
|
|
type HandshakeResponse struct {
|
|
Type []byte
|
|
Flags []byte
|
|
SenderPID []byte
|
|
PeerPID []byte
|
|
}
|
|
|
|
// Bytes returns a serialized handshake response.
|
|
func (r *HandshakeResponse) Bytes() []byte {
|
|
buf := &bytes.Buffer{}
|
|
|
|
buf.Write(r.Type) // nolint: gosec
|
|
buf.Write(r.Flags) // nolint: gosec
|
|
buf.Write(r.SenderPID) // nolint: gosec
|
|
buf.Write(r.PeerPID) // nolint: gosec
|
|
|
|
return buf.Bytes()
|
|
}
|
|
|
|
// Valid checks that handshake response compliments request.
|
|
func (r *HandshakeResponse) Valid(req *HandshakeRequest) error {
|
|
if !bytes.Equal(r.Type, TagHandshake) {
|
|
return errors.New("Unexpected handshake tag")
|
|
}
|
|
if !bytes.Equal(r.PeerPID, HandshakeSenderPID) {
|
|
return errors.New("Incorrect sender PID")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// NewHandshakeResponse constructs new handshake response from the given
|
|
// data.
|
|
func NewHandshakeResponse(data []byte) (*HandshakeResponse, error) {
|
|
if len(data) != 32 {
|
|
return nil, errors.New("Incorrect handshake response length")
|
|
}
|
|
|
|
return &HandshakeResponse{
|
|
Type: data[:4],
|
|
Flags: data[4:8],
|
|
SenderPID: data[8:20],
|
|
PeerPID: data[20:],
|
|
}, nil
|
|
}
|