diff --git a/src/config.go b/src/config.go index c889de0..9751a18 100644 --- a/src/config.go +++ b/src/config.go @@ -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": diff --git a/src/uapi_darwin.go b/src/uapi_darwin.go index ee6ee0b..9eee53c 100644 --- a/src/uapi_darwin.go +++ b/src/uapi_darwin.go @@ -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