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
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

dialer.go 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package telegram
  2. import (
  3. "context"
  4. "net"
  5. "time"
  6. "github.com/juju/errors"
  7. "github.com/9seconds/mtg/config"
  8. "github.com/9seconds/mtg/wrappers"
  9. )
  10. const telegramDialTimeout = 10 * time.Second
  11. type tgDialer struct {
  12. net.Dialer
  13. conf *config.Config
  14. }
  15. func (t *tgDialer) dial(addr string) (net.Conn, error) {
  16. conn, err := t.Dialer.Dial("tcp", addr)
  17. if err != nil {
  18. return nil, errors.Annotate(err, "Cannot connect to Telegram")
  19. }
  20. tcpSocket := conn.(*net.TCPConn)
  21. if err = tcpSocket.SetNoDelay(true); err != nil {
  22. return nil, errors.Annotate(err, "Cannot set NO_DELAY to Telegram")
  23. }
  24. if err = tcpSocket.SetReadBuffer(t.conf.WriteBufferSize); err != nil {
  25. return nil, errors.Annotate(err, "Cannot set read buffer size on telegram socket")
  26. }
  27. if err = tcpSocket.SetWriteBuffer(t.conf.ReadBufferSize); err != nil {
  28. return nil, errors.Annotate(err, "Cannot set write buffer size on telegram socket")
  29. }
  30. return conn, nil
  31. }
  32. func (t *tgDialer) dialRWC(ctx context.Context, cancel context.CancelFunc,
  33. addr, connID string) (wrappers.StreamReadWriteCloser, error) {
  34. conn, err := t.dial(addr)
  35. if err != nil {
  36. return nil, err
  37. }
  38. tgConn := wrappers.NewConn(ctx, cancel, conn, connID,
  39. wrappers.ConnPurposeTelegram, t.conf.PublicIPv4, t.conf.PublicIPv6)
  40. return tgConn, nil
  41. }