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 символов.

timeoutrwc.go 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package wrappers
  2. import (
  3. "net"
  4. "time"
  5. "github.com/9seconds/mtg/config"
  6. )
  7. type TimeoutReadWriteCloserWithAddr struct {
  8. conn net.Conn
  9. sock string
  10. publicIPv4 net.IP
  11. publicIPv6 net.IP
  12. }
  13. func (t *TimeoutReadWriteCloserWithAddr) Read(p []byte) (int, error) {
  14. t.conn.SetReadDeadline(time.Now().Add(config.TimeoutRead))
  15. return t.conn.Read(p)
  16. }
  17. func (t *TimeoutReadWriteCloserWithAddr) Write(p []byte) (int, error) {
  18. t.conn.SetWriteDeadline(time.Now().Add(config.TimeoutWrite))
  19. return t.conn.Write(p)
  20. }
  21. func (t *TimeoutReadWriteCloserWithAddr) Close() error {
  22. return t.conn.Close()
  23. }
  24. func (t *TimeoutReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
  25. return t.conn.RemoteAddr().(*net.TCPAddr)
  26. }
  27. func (t *TimeoutReadWriteCloserWithAddr) LocalAddr() *net.TCPAddr {
  28. addr := t.conn.LocalAddr().(*net.TCPAddr)
  29. newAddr := *addr
  30. if t.RemoteAddr().IP.To4() != nil {
  31. if t.publicIPv4 != nil {
  32. newAddr.IP = t.publicIPv4
  33. }
  34. } else if t.publicIPv6 != nil {
  35. newAddr.IP = t.publicIPv6
  36. }
  37. return &newAddr
  38. }
  39. func (t *TimeoutReadWriteCloserWithAddr) SocketID() string {
  40. return t.sock
  41. }
  42. func NewTimeoutRWC(conn net.Conn, sock string, ipv4, ipv6 net.IP) ReadWriteCloserWithAddr {
  43. return &TimeoutReadWriteCloserWithAddr{
  44. conn: conn,
  45. publicIPv4: ipv4,
  46. publicIPv6: ipv6,
  47. sock: sock,
  48. }
  49. }