]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Close UDP connection when listen port changes
authorMathias Hall-Andersen <mathias@hall-andersen.dk>
Sun, 23 Jul 2017 14:21:08 +0000 (16:21 +0200)
committerMathias Hall-Andersen <mathias@hall-andersen.dk>
Sun, 23 Jul 2017 14:21:08 +0000 (16:21 +0200)
src/config.go
src/uapi_darwin.go

index c889de0907823e48400ca62f75fbb0c0c67b9620..9751a180888c6b2e1e86633c6986b2a1ef14a52d 100644 (file)
@@ -2,7 +2,6 @@ package main
 
 import (
        "bufio"
-       "errors"
        "fmt"
        "io"
        "net"
@@ -105,8 +104,6 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
                key := parts[0]
                value := parts[1]
 
-               fmt.Println(key, value)
-
                switch key {
 
                /* interface configuration */
@@ -125,16 +122,21 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
                        }
 
                case "listen_port":
-                       var port int
-                       _, err := fmt.Sscanf(value, "%d", &port)
-                       if err != nil || port > (1<<16) || port < 0 {
+                       port, err := strconv.ParseUint(value, 10, 16)
+                       if err != nil {
                                logError.Println("Failed to set listen_port:", err)
                                return &IPCError{Code: ipcErrorInvalidValue}
                        }
-                       device.net.mutex.Lock()
-                       device.net.addr.Port = port
-                       device.net.conn, err = net.ListenUDP("udp", device.net.addr)
-                       device.net.mutex.Unlock()
+                       netc := &device.net
+                       netc.mutex.Lock()
+                       if netc.addr.Port != int(port) {
+                               if netc.conn != nil {
+                                       netc.conn.Close()
+                               }
+                               netc.addr.Port = int(port)
+                               netc.conn, err = net.ListenUDP("udp", netc.addr)
+                       }
+                       netc.mutex.Unlock()
                        if err != nil {
                                logError.Println("Failed to create UDP listener:", err)
                                return &IPCError{Code: ipcErrorInvalidValue}
@@ -151,15 +153,10 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
                                return &IPCError{Code: ipcErrorInvalidValue}
                        }
                        device.mutex.RLock()
-                       found, ok := device.peers[pubKey]
+                       peer, _ := device.peers[pubKey]
                        device.mutex.RUnlock()
-                       if ok {
-                               peer = found
-                       } else {
-                               peer = device.NewPeer(pubKey)
-                       }
                        if peer == nil {
-                               panic(errors.New("bug: failed to find / create peer"))
+                               peer = device.NewPeer(pubKey)
                        }
 
                case "replace_peers":
index ee6ee0be89a448a369474095128df1a09757d482..9eee53c9fc943f403e69baf798b90795b43a1a18 100644 (file)
@@ -7,12 +7,6 @@ import (
        "time"
 )
 
-/* TODO:
- * This code can be improved by using fsnotify once:
- * https://github.com/fsnotify/fsnotify/pull/205
- * Is merged
- */
-
 type UAPIListener struct {
        listener net.Listener // unix socket listener
        connNew  chan net.Conn