From 7ee06c823949ff9c263078ee490a4477f87269c5 Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Sat, 25 Dec 2021 14:13:41 +0000 Subject: [PATCH] add connection adaptor func --- common/net/packetaddr/connection_adaptor.go | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/common/net/packetaddr/connection_adaptor.go b/common/net/packetaddr/connection_adaptor.go index 87e0f9d4d..c93c2f533 100644 --- a/common/net/packetaddr/connection_adaptor.go +++ b/common/net/packetaddr/connection_adaptor.go @@ -2,6 +2,7 @@ package packetaddr import ( "context" + "io" gonet "net" "sync" "time" @@ -105,3 +106,36 @@ func (c packetConnectionAdaptor) SetReadDeadline(t time.Time) error { func (c packetConnectionAdaptor) SetWriteDeadline(t time.Time) error { return nil } + +func ToPacketAddrReadWriteCloser(conn net.PacketConn, isStream bool) io.ReadWriteCloser { + return &packetConnWrapper{conn} +} + +type packetConnWrapper struct { + conn net.PacketConn +} + +func (pc *packetConnWrapper) Read(p []byte) (n int, err error) { + recbuf := buf.StackNew() + recbuf.Extend(2048) + n, addr, err := pc.conn.ReadFrom(recbuf.Bytes()) + if err != nil { + return 0, nil + } + result := AttachAddressToPacket(recbuf.Bytes()[0:n], addr) + n = copy(p, result) + return n, nil +} + +func (pc *packetConnWrapper) Write(p []byte) (n int, err error) { + data, addr := ExtractAddressFromPacket(p) + _, err = pc.conn.WriteTo(data, addr) + if err != nil { + return 0, err + } + return len(p), nil +} + +func (pc *packetConnWrapper) Close() error { + return pc.Close() +}