aboutsummaryrefslogtreecommitdiffstats
path: root/src/conn_default.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-11-19 00:21:58 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-11-19 00:21:58 +0100
commita79fdc13a2d7be07b20ea499da9210ebe69f1958 (patch)
tree15e8f2cc4512130efe83ed532deff53f801f6df3 /src/conn_default.go
parentMoved endpoint into interface and simplified peer (diff)
downloadwireguard-go-a79fdc13a2d7be07b20ea499da9210ebe69f1958.tar.xz
wireguard-go-a79fdc13a2d7be07b20ea499da9210ebe69f1958.zip
Begin generic Bind implementation
Diffstat (limited to '')
-rw-r--r--src/conn_default.go69
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
-}