diff --git a/common/interrupt/conn.go b/common/interrupt/conn.go index 94caa915..fa0b7655 100644 --- a/common/interrupt/conn.go +++ b/common/interrupt/conn.go @@ -4,29 +4,16 @@ import ( "net" "github.com/sagernet/sing/common/bufio" + N "github.com/sagernet/sing/common/network" "github.com/sagernet/sing/common/x/list" ) -/*type GroupedConn interface { - MarkAsInternal() -} - -func MarkAsInternal(conn any) { - if groupedConn, isGroupConn := common.Cast[GroupedConn](conn); isGroupConn { - groupedConn.MarkAsInternal() - } -}*/ - type Conn struct { net.Conn group *Group element *list.Element[*groupConnItem] } -/*func (c *Conn) MarkAsInternal() { - c.element.Value.internal = true -}*/ - func (c *Conn) Close() error { c.group.access.Lock() defer c.group.access.Unlock() @@ -47,20 +34,20 @@ func (c *Conn) Upstream() any { } type PacketConn struct { - net.PacketConn + N.NetPacketConn group *Group element *list.Element[*groupConnItem] } -/*func (c *PacketConn) MarkAsInternal() { - c.element.Value.internal = true -}*/ +func newPacketConn(group *Group, conn net.PacketConn, element *list.Element[*groupConnItem]) *PacketConn { + return &PacketConn{NetPacketConn: bufio.NewPacketConn(conn), group: group, element: element} +} func (c *PacketConn) Close() error { c.group.access.Lock() defer c.group.access.Unlock() c.group.connections.Remove(c.element) - return c.PacketConn.Close() + return c.NetPacketConn.Close() } func (c *PacketConn) ReaderReplaceable() bool { @@ -72,5 +59,5 @@ func (c *PacketConn) WriterReplaceable() bool { } func (c *PacketConn) Upstream() any { - return bufio.NewPacketConn(c.PacketConn) + return c.NetPacketConn } diff --git a/common/interrupt/group.go b/common/interrupt/group.go index ba2e7f73..63ae199e 100644 --- a/common/interrupt/group.go +++ b/common/interrupt/group.go @@ -33,7 +33,7 @@ func (g *Group) NewPacketConn(conn net.PacketConn, isExternal bool) net.PacketCo g.access.Lock() defer g.access.Unlock() item := g.connections.PushBack(&groupConnItem{conn, isExternal}) - return &PacketConn{PacketConn: conn, group: g, element: item} + return newPacketConn(g, conn, item) } func (g *Group) Interrupt(interruptExternalConnections bool) {