Browse Source

add connection adaptor func

Shelikhoo 3 years ago
parent
commit
7ee06c8239
1 changed files with 34 additions and 0 deletions
  1. 34 0
      common/net/packetaddr/connection_adaptor.go

+ 34 - 0
common/net/packetaddr/connection_adaptor.go

@@ -2,6 +2,7 @@ package packetaddr
 
 
 import (
 import (
 	"context"
 	"context"
+	"io"
 	gonet "net"
 	gonet "net"
 	"sync"
 	"sync"
 	"time"
 	"time"
@@ -105,3 +106,36 @@ func (c packetConnectionAdaptor) SetReadDeadline(t time.Time) error {
 func (c packetConnectionAdaptor) SetWriteDeadline(t time.Time) error {
 func (c packetConnectionAdaptor) SetWriteDeadline(t time.Time) error {
 	return nil
 	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()
+}