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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

middle.go 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package telegram
  2. import (
  3. "context"
  4. "fmt"
  5. "sync"
  6. "github.com/9seconds/mtg/conntypes"
  7. "github.com/9seconds/mtg/telegram/api"
  8. "github.com/9seconds/mtg/wrappers"
  9. )
  10. type middleTelegram struct {
  11. baseTelegram
  12. secret []byte
  13. mutex sync.RWMutex
  14. }
  15. func (m *middleTelegram) update() error {
  16. secret, err := api.Secret()
  17. if err != nil {
  18. return fmt.Errorf("cannot fetch secret: %w", err)
  19. }
  20. v4Addresses, v4DefaultDC, err := api.AddressesV4()
  21. if err != nil {
  22. return fmt.Errorf("cannot fetch addresses for ipv4: %w", err)
  23. }
  24. v6Addresses, v6DefaultDC, err := api.AddressesV6()
  25. if err != nil {
  26. return fmt.Errorf("cannot fetch addresses for ipv6: %w", err)
  27. }
  28. m.mutex.Lock()
  29. m.secret = secret
  30. m.v4DefaultDC = v4DefaultDC
  31. m.V6DefaultDC = v6DefaultDC
  32. m.v4Addresses = v4Addresses
  33. m.v6Addresses = v6Addresses
  34. m.mutex.Unlock()
  35. return nil
  36. }
  37. func (m *middleTelegram) Dial(ctx context.Context,
  38. cancel context.CancelFunc,
  39. dc conntypes.DC,
  40. protocol conntypes.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) {
  41. if dc == 0 {
  42. dc = conntypes.DCDefaultIdx
  43. }
  44. return m.baseTelegram.dial(ctx, cancel, dc, protocol)
  45. }