github.com/sagernet/sing-box@v1.2.7/common/debugio/log.go (about) 1 package debugio 2 3 import ( 4 "net" 5 6 "github.com/sagernet/sing-box/log" 7 "github.com/sagernet/sing/common/buf" 8 "github.com/sagernet/sing/common/bufio" 9 M "github.com/sagernet/sing/common/metadata" 10 N "github.com/sagernet/sing/common/network" 11 ) 12 13 type LogConn struct { 14 N.ExtendedConn 15 logger log.Logger 16 prefix string 17 } 18 19 func NewLogConn(conn net.Conn, logger log.Logger, prefix string) N.ExtendedConn { 20 return &LogConn{bufio.NewExtendedConn(conn), logger, prefix} 21 } 22 23 func (c *LogConn) Read(p []byte) (n int, err error) { 24 n, err = c.ExtendedConn.Read(p) 25 if n > 0 { 26 c.logger.Debug(c.prefix, " read ", buf.EncodeHexString(p[:n])) 27 } 28 return 29 } 30 31 func (c *LogConn) Write(p []byte) (n int, err error) { 32 c.logger.Debug(c.prefix, " write ", buf.EncodeHexString(p)) 33 return c.ExtendedConn.Write(p) 34 } 35 36 func (c *LogConn) ReadBuffer(buffer *buf.Buffer) error { 37 err := c.ExtendedConn.ReadBuffer(buffer) 38 if err == nil { 39 c.logger.Debug(c.prefix, " read buffer ", buf.EncodeHexString(buffer.Bytes())) 40 } 41 return err 42 } 43 44 func (c *LogConn) WriteBuffer(buffer *buf.Buffer) error { 45 c.logger.Debug(c.prefix, " write buffer ", buf.EncodeHexString(buffer.Bytes())) 46 return c.ExtendedConn.WriteBuffer(buffer) 47 } 48 49 func (c *LogConn) Upstream() any { 50 return c.ExtendedConn 51 } 52 53 type LogPacketConn struct { 54 N.NetPacketConn 55 logger log.Logger 56 prefix string 57 } 58 59 func NewLogPacketConn(conn net.PacketConn, logger log.Logger, prefix string) N.NetPacketConn { 60 return &LogPacketConn{bufio.NewPacketConn(conn), logger, prefix} 61 } 62 63 func (c *LogPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) { 64 n, addr, err = c.NetPacketConn.ReadFrom(p) 65 if n > 0 { 66 c.logger.Debug(c.prefix, " read from ", addr, " ", buf.EncodeHexString(p[:n])) 67 } 68 return 69 } 70 71 func (c *LogPacketConn) WriteTo(p []byte, addr net.Addr) (n int, err error) { 72 c.logger.Debug(c.prefix, " write to ", addr, " ", buf.EncodeHexString(p)) 73 return c.NetPacketConn.WriteTo(p, addr) 74 } 75 76 func (c *LogPacketConn) ReadPacket(buffer *buf.Buffer) (destination M.Socksaddr, err error) { 77 destination, err = c.NetPacketConn.ReadPacket(buffer) 78 if err == nil { 79 c.logger.Debug(c.prefix, " read packet from ", destination, " ", buf.EncodeHexString(buffer.Bytes())) 80 } 81 return 82 } 83 84 func (c *LogPacketConn) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error { 85 c.logger.Debug(c.prefix, " write packet to ", destination, " ", buf.EncodeHexString(buffer.Bytes())) 86 return c.NetPacketConn.WritePacket(buffer, destination) 87 }