github.com/geph-official/geph2@v0.22.6-0.20210211030601-f527cb59b0df/libs/niaucchi5/packetwire.go (about) 1 package niaucchi5 2 3 import ( 4 "log" 5 "net" 6 "time" 7 ) 8 9 // PacketWire is the base "unreliable connection" primitive used in niaucchi5. 10 type PacketWire interface { 11 SendSegment(seg []byte, allowBlocking bool) (err error) 12 RecvSegment(seg []byte) (n int, err error) 13 } 14 15 type pwAddr struct{} 16 17 func (pwAddr) String() string { 18 return "packetwire" 19 } 20 21 func (pwAddr) Network() string { 22 return "packetwire" 23 } 24 25 // StandardAddr is the standard net.Addr to communicate with the "other end" in PacketWire-generated PacketConns. 26 var StandardAddr net.Addr 27 28 func init() { 29 StandardAddr = &pwAddr{} 30 } 31 32 // ToPacketConn converts a PacketWire to a PacketConn with a standard remote address. 33 func ToPacketConn(pw PacketWire) net.PacketConn { 34 return &pwPacketConn{pw} 35 } 36 37 type pwPacketConn struct { 38 pwire PacketWire 39 } 40 41 func (pw *pwPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) { 42 addr = &pwAddr{} 43 n, err = pw.pwire.RecvSegment(p) 44 return 45 } 46 47 func (pw *pwPacketConn) WriteTo(p []byte, addr net.Addr) (n int, err error) { 48 err = pw.pwire.SendSegment(p, false) 49 n = len(p) 50 return 51 } 52 53 func (pw *pwPacketConn) Close() (err error) { 54 panic("not implemented") 55 } 56 57 func (pw *pwPacketConn) LocalAddr() net.Addr { 58 return StandardAddr 59 } 60 61 func (pw *pwPacketConn) RemoteAddr() net.Addr { 62 return StandardAddr 63 } 64 65 func (pw *pwPacketConn) SetDeadline(t time.Time) error { 66 log.Println("NOT IMPLEMENTED") 67 return nil 68 } 69 70 func (pw *pwPacketConn) SetReadDeadline(t time.Time) error { 71 log.Println("NOT IMPLEMENTED") 72 return nil 73 } 74 75 func (pw *pwPacketConn) SetWriteDeadline(t time.Time) error { 76 log.Println("NOT IMPLEMENTED") 77 return nil 78 }