aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service/ipc_client.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-10 02:37:34 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-10 03:37:23 +0100
commita9aa443ea78cf9926524dda8680a1e1a38d425c9 (patch)
treeac98e26149c9829900e84977569452a2a9274a56 /service/ipc_client.go
parentinstaller: bring to foreground using shellexec process (diff)
downloadwireguard-windows-a9aa443ea78cf9926524dda8680a1e1a38d425c9.tar.xz
wireguard-windows-a9aa443ea78cf9926524dda8680a1e1a38d425c9.zip
service: keep track of proper errors
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--service/ipc_client.go21
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