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 922B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package rpc
  2. import (
  3. "bytes"
  4. "github.com/juju/errors"
  5. )
  6. type HandshakeResponse struct {
  7. Type []byte
  8. Flags []byte
  9. SenderPID []byte
  10. PeerPID []byte
  11. }
  12. func (r *HandshakeResponse) Bytes() []byte {
  13. buf := &bytes.Buffer{}
  14. buf.Write(r.Type[:])
  15. buf.Write(r.Flags[:])
  16. buf.Write(r.SenderPID[:])
  17. buf.Write(r.PeerPID[:])
  18. return buf.Bytes()
  19. }
  20. func (r *HandshakeResponse) Valid(req *HandshakeRequest) error {
  21. if !bytes.Equal(r.Type, TagHandshake) {
  22. return errors.New("Unexpected handshake tag")
  23. }
  24. if !bytes.Equal(r.PeerPID, HandshakeSenderPID) {
  25. return errors.New("Incorrect sender PID")
  26. }
  27. return nil
  28. }
  29. func NewHandshakeResponse(data []byte) (*HandshakeResponse, error) {
  30. if len(data) != 32 {
  31. return nil, errors.New("Incorrect handshake response length")
  32. }
  33. return &HandshakeResponse{
  34. Type: data[:4],
  35. Flags: data[4:8],
  36. SenderPID: data[8:20],
  37. PeerPID: data[20:],
  38. }, nil
  39. }