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
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

proxy_response.go 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package rpc
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/9seconds/mtg/conntypes"
  6. )
  7. type ProxyResponseType uint8
  8. const (
  9. ProxyResponseTypeAns ProxyResponseType = iota
  10. ProxyResponseTypeSimpleAck
  11. ProxyResponseTypeCloseExt
  12. )
  13. type ProxyResponse struct {
  14. Type ProxyResponseType
  15. ConnID conntypes.ConnID
  16. Payload conntypes.Packet
  17. }
  18. func ParseProxyResponse(packet conntypes.Packet) (*ProxyResponse, error) {
  19. var response ProxyResponse
  20. if len(packet) < 4 {
  21. return nil, fmt.Errorf("incorrect packet length: %d", len(packet))
  22. }
  23. tag := packet[:4]
  24. switch {
  25. case bytes.Equal(tag, TagProxyAns):
  26. response.Type = ProxyResponseTypeAns
  27. copy(response.ConnID[:], packet[8:16])
  28. response.Payload = packet[16:]
  29. return &response, nil
  30. case bytes.Equal(tag, TagSimpleAck):
  31. response.Type = ProxyResponseTypeSimpleAck
  32. copy(response.ConnID[:], packet[4:12])
  33. response.Payload = packet[12:]
  34. return &response, nil
  35. case bytes.Equal(tag, TagCloseExt):
  36. response.Type = ProxyResponseTypeCloseExt
  37. return &response, nil
  38. }
  39. return nil, fmt.Errorf("unknown response type %x", tag)
  40. }