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.

logrwc.go 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package proxy
  2. import (
  3. "io"
  4. "go.uber.org/zap"
  5. )
  6. // LogReadWriteCloser adds additional logging for reading/writing. All
  7. // logging is performed for debug mode only.
  8. type LogReadWriteCloser struct {
  9. conn io.ReadWriteCloser
  10. logger *zap.SugaredLogger
  11. sockid string
  12. name string
  13. }
  14. // Read reads from connection
  15. func (l *LogReadWriteCloser) Read(p []byte) (n int, err error) {
  16. n, err = l.conn.Read(p)
  17. l.logger.Debugw("Finish reading", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err)
  18. return
  19. }
  20. // Write writes into connection.
  21. func (l *LogReadWriteCloser) Write(p []byte) (n int, err error) {
  22. n, err = l.conn.Write(p)
  23. l.logger.Debugw("Finish writing", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err)
  24. return
  25. }
  26. // Close closes underlying connection.
  27. func (l *LogReadWriteCloser) Close() error {
  28. err := l.conn.Close()
  29. l.logger.Debugw("Finish closing socket", "name", l.name, "socketid", l.sockid, "error", err)
  30. return err
  31. }
  32. func newLogReadWriteCloser(conn io.ReadWriteCloser, logger *zap.SugaredLogger, sockid string, name string) io.ReadWriteCloser {
  33. return &LogReadWriteCloser{
  34. conn: conn,
  35. logger: logger,
  36. sockid: sockid,
  37. name: name,
  38. }
  39. }