]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Implemented missing methods for Bind and Endpoint
authorMathias Hall-Andersen <mathias@hall-andersen.dk>
Sun, 19 Nov 2017 12:14:15 +0000 (13:14 +0100)
committerMathias Hall-Andersen <mathias@hall-andersen.dk>
Sun, 19 Nov 2017 12:14:15 +0000 (13:14 +0100)
src/conn_default.go

index 34168c6accea756a78575232233082a2d8810525..5b73c90a307c0b17f79d34a9a3f124d3692fa6c8 100644 (file)
@@ -25,7 +25,7 @@ var _ Endpoint = (*NativeEndpoint)(nil)
 
 func CreateEndpoint(s string) (Endpoint, error) {
        addr, err := parseEndpoint(s)
-       return (addr).(*NativeEndpoint), err
+       return (*NativeEndpoint)(addr), err
 }
 
 func (_ *NativeEndpoint) ClearSrc() {}
@@ -40,7 +40,7 @@ func (e *NativeEndpoint) SrcIP() net.IP {
 
 func (e *NativeEndpoint) DstToBytes() []byte {
        addr := (*net.UDPAddr)(e)
-       out := addr.IP.([]byte)
+       out := addr.IP
        out = append(out, byte(addr.Port&0xff))
        out = append(out, byte((addr.Port>>8)&0xff))
        return out
@@ -54,11 +54,11 @@ func (e *NativeEndpoint) SrcToString() string {
        return ""
 }
 
-func listenNet(net string, port int) (*net.UDPConn, int, error) {
+func listenNet(network string, port int) (*net.UDPConn, int, error) {
 
        // listen
 
-       conn, err := net.ListenUDP("udp", &UDPAddr{Port: port})
+       conn, err := net.ListenUDP(network, &net.UDPAddr{Port: port})
        if err != nil {
                return nil, 0, err
        }
@@ -66,32 +66,66 @@ func listenNet(net string, port int) (*net.UDPConn, int, error) {
        // retrieve port
 
        laddr := conn.LocalAddr()
-       uaddr, = net.ResolveUDPAddr(
+       uaddr, err := net.ResolveUDPAddr(
                laddr.Network(),
                laddr.String(),
        )
-
+       if err != nil {
+               return nil, 0, err
+       }
        return conn, uaddr.Port, nil
 }
 
-func CreateBind(port uint16) (Bind, uint16, error) {
+func CreateBind(uport uint16) (Bind, uint16, error) {
+       var err error
+       var bind NativeBind
 
-       // listen
+       port := int(uport)
 
-       addr := UDPAddr{
-               Port: int(port),
+       bind.ipv4, port, err = listenNet("udp4", port)
+       if err != nil {
+               return nil, 0, err
        }
-       conn, err := net.ListenUDP("udp", &addr)
+
+       bind.ipv6, port, err = listenNet("udp6", port)
        if err != nil {
+               bind.ipv4.Close()
                return nil, 0, err
        }
 
-       // retrieve port
+       return &bind, uint16(port), nil
+}
 
-       laddr := conn.LocalAddr()
-       uaddr, _ = net.ResolveUDPAddr(
-               laddr.Network(),
-               laddr.String(),
-       )
-       return uaddr.Port
+func (bind *NativeBind) Close() error {
+       err1 := bind.ipv4.Close()
+       err2 := bind.ipv6.Close()
+       if err1 != nil {
+               return err1
+       }
+       return err2
+}
+
+func (bind *NativeBind) ReceiveIPv4(buff []byte) (int, Endpoint, error) {
+       n, endpoint, err := bind.ipv4.ReadFromUDP(buff)
+       return n, (*NativeEndpoint)(endpoint), err
+}
+
+func (bind *NativeBind) ReceiveIPv6(buff []byte) (int, Endpoint, error) {
+       n, endpoint, err := bind.ipv6.ReadFromUDP(buff)
+       return n, (*NativeEndpoint)(endpoint), err
+}
+
+func (bind *NativeBind) Send(buff []byte, endpoint Endpoint) error {
+       var err error
+       nend := endpoint.(*NativeEndpoint)
+       if nend.IP.To16() != nil {
+               _, err = bind.ipv6.WriteToUDP(buff, (*net.UDPAddr)(nend))
+       } else {
+               _, err = bind.ipv4.WriteToUDP(buff, (*net.UDPAddr)(nend))
+       }
+       return err
+}
+
+func (bind *NativeBind) SetMark(_ uint32) error {
+       return nil
 }