From a9aa443ea78cf9926524dda8680a1e1a38d425c9 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 10 Mar 2019 02:37:34 +0100 Subject: service: keep track of proper errors Signed-off-by: Jason A. Donenfeld --- service/ipc_client.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'service/ipc_client.go') 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 -- cgit v1.2.3-59-g8ed1b