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  }