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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package wrappers
  2. import (
  3. "net"
  4. "time"
  5. "go.uber.org/zap"
  6. "github.com/9seconds/mtg/stats"
  7. )
  8. type wrapperStats struct {
  9. parent StreamReadWriteCloser
  10. }
  11. func (w *wrapperStats) Write(p []byte) (int, error) {
  12. n, err := w.parent.Write(p)
  13. stats.S.EgressTraffic(n)
  14. return n, err
  15. }
  16. func (w *wrapperStats) WriteTimeout(p []byte, timeout time.Duration) (int, error) {
  17. n, err := w.parent.WriteTimeout(p, timeout)
  18. stats.S.EgressTraffic(n)
  19. return n, err
  20. }
  21. func (w *wrapperStats) Read(p []byte) (int, error) {
  22. n, err := w.parent.Read(p)
  23. stats.S.IngressTraffic(n)
  24. return n, err
  25. }
  26. func (w *wrapperStats) ReadTimeout(p []byte, timeout time.Duration) (int, error) {
  27. n, err := w.parent.ReadTimeout(p, timeout)
  28. stats.S.IngressTraffic(n)
  29. return n, err
  30. }
  31. func (w *wrapperStats) Conn() net.Conn {
  32. return w.parent.Conn()
  33. }
  34. func (w *wrapperStats) Logger() *zap.SugaredLogger {
  35. return w.parent.Logger().Named("traffic")
  36. }
  37. func (w *wrapperStats) LocalAddr() *net.TCPAddr {
  38. return w.parent.LocalAddr()
  39. }
  40. func (w *wrapperStats) RemoteAddr() *net.TCPAddr {
  41. return w.parent.RemoteAddr()
  42. }
  43. func (w *wrapperStats) Close() error {
  44. return w.parent.Close()
  45. }
  46. func NewTraffic(parent StreamReadWriteCloser) StreamReadWriteCloser {
  47. return &wrapperStats{parent}
  48. }