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
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package proxy
  2. import (
  3. "sync"
  4. "go.uber.org/zap"
  5. "github.com/9seconds/mtg/conntypes"
  6. "github.com/9seconds/mtg/protocol"
  7. "github.com/9seconds/mtg/wrappers/packetack"
  8. )
  9. func middleConnection(request *protocol.TelegramRequest) error {
  10. telegramConn := packetack.NewProxy(request)
  11. defer telegramConn.Close()
  12. var clientConn conntypes.PacketAckFullReadWriteCloser
  13. switch request.ClientProtocol.ConnectionType() {
  14. case conntypes.ConnectionTypeAbridged:
  15. clientConn = packetack.NewClientAbridged(request.ClientConn)
  16. case conntypes.ConnectionTypeIntermediate:
  17. clientConn = packetack.NewClientIntermediate(request.ClientConn)
  18. case conntypes.ConnectionTypeSecure:
  19. clientConn = packetack.NewClientIntermediateSecure(request.ClientConn)
  20. default:
  21. panic("unknown connection type")
  22. }
  23. wg := &sync.WaitGroup{}
  24. wg.Add(2)
  25. go middlePipe(telegramConn, clientConn, wg, request.Logger)
  26. go middlePipe(clientConn, telegramConn, wg, request.Logger)
  27. <-request.Ctx.Done()
  28. wg.Wait()
  29. return request.Ctx.Err()
  30. }
  31. func middlePipe(dst conntypes.PacketAckWriter,
  32. src conntypes.PacketAckReader,
  33. wg *sync.WaitGroup,
  34. logger *zap.SugaredLogger) {
  35. defer wg.Done()
  36. for {
  37. acks := conntypes.ConnectionAcks{}
  38. packet, err := src.Read(&acks)
  39. if err != nil {
  40. logger.Debugw("Cannot read packet", "error", err)
  41. return
  42. }
  43. if err = dst.Write(packet, &acks); err != nil {
  44. logger.Debugw("Cannot send packet", "error", err)
  45. return
  46. }
  47. }
  48. }