diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-29 15:52:17 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-29 15:52:17 +0200 |
commit | 3245ef2f821fee0580f7d97c6f05223c2673e318 (patch) | |
tree | a37424f17b611c6d5d04da9fceb4a756dadf52ab /service | |
parent | ui: account for IPC failures in UI initialization (diff) | |
download | wireguard-windows-3245ef2f821fee0580f7d97c6f05223c2673e318.tar.xz wireguard-windows-3245ef2f821fee0580f7d97c6f05223c2673e318.zip |
service: pass global state with notification
Diffstat (limited to 'service')
-rw-r--r-- | service/ipc_client.go | 11 | ||||
-rw-r--r-- | service/ipc_server.go | 4 |
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()) } } |