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.

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package client
  2. import (
  3. "context"
  4. "net"
  5. "github.com/9seconds/mtg/config"
  6. "github.com/9seconds/mtg/mtproto"
  7. "github.com/9seconds/mtg/wrappers"
  8. )
  9. // MiddleInit initializes client connection for proxy which has to
  10. // support promoted channels, connect to Telegram middle proxies etc.
  11. func MiddleInit(ctx context.Context, cancel context.CancelFunc, socket net.Conn,
  12. connID string, conf *config.Config) (wrappers.Wrap, *mtproto.ConnectionOpts, error) {
  13. conn, opts, err := DirectInit(ctx, cancel, socket, connID, conf)
  14. if err != nil {
  15. return nil, nil, err
  16. }
  17. connStream := conn.(wrappers.StreamReadWriteCloser)
  18. var newConn wrappers.PacketReadWriteCloser
  19. switch opts.ConnectionType {
  20. case mtproto.ConnectionTypeAbridged:
  21. newConn = wrappers.NewMTProtoAbridged(connStream, opts)
  22. case mtproto.ConnectionTypeIntermediate:
  23. newConn = wrappers.NewMTProtoIntermediate(connStream, opts)
  24. case mtproto.ConnectionTypeSecure:
  25. newConn = wrappers.NewMTProtoIntermediateSecure(connStream, opts)
  26. default:
  27. panic("Unknown connection type")
  28. }
  29. opts.ConnectionProto = mtproto.ConnectionProtocolIPv4
  30. if socket.LocalAddr().(*net.TCPAddr).IP.To4() == nil {
  31. opts.ConnectionProto = mtproto.ConnectionProtocolIPv6
  32. }
  33. return newConn, opts, err
  34. }