Skip to content

Commit

Permalink
add packetConn constructor for re-use in outline-ss-server (#300)
Browse files Browse the repository at this point in the history
* Add a constructor for `packetConn` so it can be re-used in `outline-ss-server`.

* Add a comment to `NewPacketConn`.
  • Loading branch information
sbruens authored Nov 14, 2024
1 parent 2fdbf40 commit 57720ed
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions transport/shadowsocks/packet_listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ func (c *packetListener) ListenPacket(ctx context.Context) (net.PacketConn, erro
if err != nil {
return nil, fmt.Errorf("could not connect to endpoint: %w", err)
}
conn := packetConn{Conn: proxyConn, key: c.key}
return &conn, nil
return NewPacketConn(proxyConn, c.key), nil
}

type packetConn struct {
Expand All @@ -65,6 +64,15 @@ type packetConn struct {

var _ net.PacketConn = (*packetConn)(nil)

// NewPacketConn wraps a [net.Conn] and returns a [net.PacketConn] that encrypts/decrypts
// packets before writing/reading them to/from the underlying connection using the provided
// encryption key.
//
// Closing the returned [net.PacketConn] will also close the underlying [net.Conn].
func NewPacketConn(conn net.Conn, key *EncryptionKey) net.PacketConn {
return &packetConn{Conn: conn, key: key}
}

// WriteTo encrypts `b` and writes to `addr` through the proxy.
func (c *packetConn) WriteTo(b []byte, addr net.Addr) (int, error) {
socksTargetAddr := socks.ParseAddr(addr.String())
Expand Down

0 comments on commit 57720ed

Please sign in to comment.