diff options
Diffstat (limited to 'src/conn_default.go')
-rw-r--r-- | src/conn_default.go | 69 |
1 files changed, 60 insertions, 9 deletions
diff --git a/src/conn_default.go b/src/conn_default.go index 31cab5c..34168c6 100644 --- a/src/conn_default.go +++ b/src/conn_default.go @@ -13,11 +13,68 @@ import ( * See conn_linux.go for an implementation on the linux platform. */ -type Endpoint *net.UDPAddr +type NativeBind struct { + ipv4 *net.UDPConn + ipv6 *net.UDPConn +} + +type NativeEndpoint net.UDPAddr + +var _ Bind = (*NativeBind)(nil) +var _ Endpoint = (*NativeEndpoint)(nil) + +func CreateEndpoint(s string) (Endpoint, error) { + addr, err := parseEndpoint(s) + return (addr).(*NativeEndpoint), err +} + +func (_ *NativeEndpoint) ClearSrc() {} + +func (e *NativeEndpoint) DstIP() net.IP { + return (*net.UDPAddr)(e).IP +} + +func (e *NativeEndpoint) SrcIP() net.IP { + return nil // not supported +} -type NativeBind *net.UDPConn +func (e *NativeEndpoint) DstToBytes() []byte { + addr := (*net.UDPAddr)(e) + out := addr.IP.([]byte) + out = append(out, byte(addr.Port&0xff)) + out = append(out, byte((addr.Port>>8)&0xff)) + return out +} -func CreateUDPBind(port uint16) (UDPBind, uint16, error) { +func (e *NativeEndpoint) DstToString() string { + return (*net.UDPAddr)(e).String() +} + +func (e *NativeEndpoint) SrcToString() string { + return "" +} + +func listenNet(net string, port int) (*net.UDPConn, int, error) { + + // listen + + conn, err := net.ListenUDP("udp", &UDPAddr{Port: port}) + if err != nil { + return nil, 0, err + } + + // retrieve port + + laddr := conn.LocalAddr() + uaddr, _ = net.ResolveUDPAddr( + laddr.Network(), + laddr.String(), + ) + + return conn, uaddr.Port, nil +} + +func CreateBind(port uint16) (Bind, uint16, error) { // listen @@ -38,9 +95,3 @@ func CreateUDPBind(port uint16) (UDPBind, uint16, error) { ) return uaddr.Port } - -func (_ Endpoint) ClearSrc() {} - -func SetMark(conn *net.UDPConn, value uint32) error { - return nil -} |