aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-04-29 15:52:17 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-29 15:52:17 +0200
commit3245ef2f821fee0580f7d97c6f05223c2673e318 (patch)
treea37424f17b611c6d5d04da9fceb4a756dadf52ab /service
parentui: account for IPC failures in UI initialization (diff)
downloadwireguard-windows-3245ef2f821fee0580f7d97c6f05223c2673e318.tar.xz
wireguard-windows-3245ef2f821fee0580f7d97c6f05223c2673e318.zip
service: pass global state with notification
Diffstat (limited to 'service')
-rw-r--r--service/ipc_client.go11
-rw-r--r--service/ipc_server.go4
2 files changed, 10 insertions, 5 deletions
diff --git a/service/ipc_client.go b/service/ipc_client.go
index 55fc043d..a6241af2 100644
--- a/service/ipc_client.go
+++ b/service/ipc_client.go
@@ -37,7 +37,7 @@ const (
var rpcClient *rpc.Client
type TunnelChangeCallback struct {
- cb func(tunnel *Tunnel, state TunnelState, err error)
+ cb func(tunnel *Tunnel, state TunnelState, globalState TunnelState, err error)
}
var tunnelChangeCallbacks = make(map[*TunnelChangeCallback]bool)
@@ -70,6 +70,11 @@ func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
if err != nil {
continue
}
+ var globalState TunnelState
+ err = decoder.Decode(&globalState)
+ if err != nil {
+ continue
+ }
var errStr string
err = decoder.Decode(&errStr)
if err != nil {
@@ -84,7 +89,7 @@ func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
}
t := &Tunnel{tunnel}
for cb := range tunnelChangeCallbacks {
- cb.cb(t, state, retErr)
+ cb.cb(t, state, globalState, retErr)
}
case TunnelsChangeNotificationType:
for cb := range tunnelsChangeCallbacks {
@@ -160,7 +165,7 @@ func IPCClientQuit(stopTunnelsOnQuit bool) (bool, error) {
return alreadyQuit, rpcClient.Call("ManagerService.Quit", stopTunnelsOnQuit, &alreadyQuit)
}
-func IPCClientRegisterTunnelChange(cb func(tunnel *Tunnel, state TunnelState, err error)) *TunnelChangeCallback {
+func IPCClientRegisterTunnelChange(cb func(tunnel *Tunnel, state TunnelState, globalState TunnelState, err error)) *TunnelChangeCallback {
s := &TunnelChangeCallback{cb}
tunnelChangeCallbacks[s] = true
return s
diff --git a/service/ipc_server.go b/service/ipc_server.go
index 4dd36b2d..0b0b3a05 100644
--- a/service/ipc_server.go
+++ b/service/ipc_server.go
@@ -294,9 +294,9 @@ func notifyAll(notificationType NotificationType, ifaces ...interface{}) {
func IPCServerNotifyTunnelChange(name string, state TunnelState, err error) {
if err == nil {
- notifyAll(TunnelChangeNotificationType, name, state, "")
+ notifyAll(TunnelChangeNotificationType, name, state, trackedTunnelsGlobalState(), "")
} else {
- notifyAll(TunnelChangeNotificationType, name, state, err.Error())
+ notifyAll(TunnelChangeNotificationType, name, state, trackedTunnelsGlobalState(), err.Error())
}
}