Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

handshake_response.go 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package rpc
  2. import (
  3. "bytes"
  4. "errors"
  5. "fmt"
  6. )
  7. type HandshakeResponse struct {
  8. Type []byte
  9. Flags []byte
  10. SenderPID []byte
  11. PeerPID []byte
  12. }
  13. // Bytes returns a serialized handshake response.
  14. func (r *HandshakeResponse) Bytes() []byte {
  15. buf := &bytes.Buffer{}
  16. buf.Write(r.Type) // nolint: gosec
  17. buf.Write(r.Flags) // nolint: gosec
  18. buf.Write(r.SenderPID) // nolint: gosec
  19. buf.Write(r.PeerPID) // nolint: gosec
  20. return buf.Bytes()
  21. }
  22. // Valid checks that handshake response compliments request.
  23. func (r *HandshakeResponse) Valid() error {
  24. if !bytes.Equal(r.Type, TagHandshake) {
  25. return errors.New("unexpected handshake tag")
  26. }
  27. if !bytes.Equal(r.PeerPID, HandshakeSenderPID) {
  28. return errors.New("incorrect sender PID")
  29. }
  30. return nil
  31. }
  32. // NewHandshakeResponse constructs new handshake response from the given
  33. // data.
  34. func NewHandshakeResponse(data []byte) (*HandshakeResponse, error) {
  35. if len(data) != 32 {
  36. return nil, fmt.Errorf("incorrect handshake response length %d", len(data))
  37. }
  38. return &HandshakeResponse{
  39. Type: data[:4],
  40. Flags: data[4:8],
  41. SenderPID: data[8:20],
  42. PeerPID: data[20:],
  43. }, nil
  44. }