diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-10 02:37:34 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-10 03:37:23 +0100 |
commit | da563a6ec66113fee96dad3ebf440607320637c6 (patch) | |
tree | ac98e26149c9829900e84977569452a2a9274a56 /service/ipc_client.go | |
parent | installer: bring to foreground using shellexec process (diff) | |
download | wireguard-windows-da563a6ec66113fee96dad3ebf440607320637c6.tar.xz wireguard-windows-da563a6ec66113fee96dad3ebf440607320637c6.zip |
service: keep track of proper errors
Diffstat (limited to '')
-rw-r--r-- | service/ipc_client.go | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/service/ipc_client.go b/service/ipc_client.go index adaca0b7..fca4a511 100644 --- a/service/ipc_client.go +++ b/service/ipc_client.go @@ -7,6 +7,7 @@ package service import ( "encoding/gob" + "errors" "golang.zx2c4.com/wireguard/windows/conf" "net/rpc" "os" @@ -37,7 +38,7 @@ const ( var rpcClient *rpc.Client type TunnelChangeCallback struct { - cb func(tunnel *Tunnel, state TunnelState) + cb func(tunnel *Tunnel, state TunnelState, err error) } var tunnelChangeCallbacks = make(map[*TunnelChangeCallback]bool) @@ -67,12 +68,24 @@ func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) { } var state TunnelState err = decoder.Decode(&state) - if err != nil || state == TunnelUnknown { + if err != nil { + continue + } + var errStr string + err = decoder.Decode(&errStr) + if err != nil { + continue + } + var retErr error + if len(errStr) > 0 { + retErr = errors.New(errStr) + } + if state == TunnelUnknown { continue } t := &Tunnel{tunnel} for cb := range tunnelChangeCallbacks { - cb.cb(t, state) + cb.cb(t, state, retErr) } case TunnelsChangeNotificationType: for cb := range tunnelsChangeCallbacks { @@ -129,7 +142,7 @@ func IPCClientQuit(stopTunnelsOnQuit bool) (bool, error) { return alreadyQuit, rpcClient.Call("ManagerService.Quit", stopTunnelsOnQuit, &alreadyQuit) } -func IPCClientRegisterTunnelChange(cb func(tunnel *Tunnel, state TunnelState)) *TunnelChangeCallback { +func IPCClientRegisterTunnelChange(cb func(tunnel *Tunnel, state TunnelState, err error)) *TunnelChangeCallback { s := &TunnelChangeCallback{cb} tunnelChangeCallbacks[s] = true return s |