aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service/ipc_client.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-02 05:54:25 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-02 07:07:05 +0100
commit9e43735dfe6a390d2779e3ba226ec3d0bb51a645 (patch)
tree3e15404826ea98d13b938417cc7fcd145b9d7f42 /service/ipc_client.go
parentsyntax: flat border (diff)
downloadwireguard-windows-9e43735dfe6a390d2779e3ba226ec3d0bb51a645.tar.xz
wireguard-windows-9e43735dfe6a390d2779e3ba226ec3d0bb51a645.zip
ipc: work out service state transitions
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--service/ipc_client.go46
1 files changed, 24 insertions, 22 deletions
diff --git a/service/ipc_client.go b/service/ipc_client.go
index f2ae2b22..6834e10e 100644
--- a/service/ipc_client.go
+++ b/service/ipc_client.go
@@ -36,17 +36,17 @@ const (
var rpcClient *rpc.Client
-type tunnelChangeCallback struct {
- cb func(tunnel string, state TunnelState)
+type TunnelChangeCallback struct {
+ cb func(tunnel *Tunnel, state TunnelState)
}
-var tunnelChangeCallbacks = make(map[*tunnelChangeCallback]bool)
+var tunnelChangeCallbacks = make(map[*TunnelChangeCallback]bool)
-type tunnelsChangeCallback struct {
+type TunnelsChangeCallback struct {
cb func()
}
-var tunnelsChangeCallbacks = make(map[*tunnelsChangeCallback]bool)
+var tunnelsChangeCallbacks = make(map[*TunnelsChangeCallback]bool)
func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
rpcClient = rpc.NewClient(&pipeRWC{reader, writer})
@@ -70,8 +70,9 @@ func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
if err != nil || state == TunnelUnknown {
continue
}
+ t := &Tunnel{tunnel}
for cb := range tunnelChangeCallbacks {
- cb.cb(tunnel, state)
+ cb.cb(t, state)
}
case TunnelsChangeNotificationType:
for cb := range tunnelsChangeCallbacks {
@@ -92,19 +93,20 @@ func (t *Tunnel) RuntimeConfig() (c conf.Config, err error) {
return
}
-func (t *Tunnel) Start() (TunnelState, error) {
- var state TunnelState
- return state, rpcClient.Call("ManagerService.Start", t.Name, &state)
+func (t *Tunnel) Start() error {
+ return rpcClient.Call("ManagerService.Start", t.Name, nil)
}
-func (t *Tunnel) Stop() (TunnelState, error) {
- var state TunnelState
- return state, rpcClient.Call("ManagerService.Stop", t.Name, &state)
+func (t *Tunnel) Stop() error {
+ return rpcClient.Call("ManagerService.Stop", t.Name, nil)
}
-func (t *Tunnel) Delete() (TunnelState, error) {
- var state TunnelState
- return state, rpcClient.Call("ManagerService.Delete", t.Name, &state)
+func (t *Tunnel) WaitForStop() error {
+ return rpcClient.Call("ManagerService.WaitForStop", t.Name, nil)
+}
+
+func (t *Tunnel) Delete() error {
+ return rpcClient.Call("ManagerService.Delete", t.Name, nil)
}
func (t *Tunnel) State() (TunnelState, error) {
@@ -119,7 +121,7 @@ func IPCClientNewTunnel(conf *conf.Config) (Tunnel, error) {
func IPCClientTunnels() ([]Tunnel, error) {
var tunnels []Tunnel
- return tunnels, rpcClient.Call("ManagerService.Tunnels", 0, &tunnels)
+ return tunnels, rpcClient.Call("ManagerService.Tunnels", uintptr(0), &tunnels)
}
func IPCClientQuit(stopTunnelsOnQuit bool) (bool, error) {
@@ -127,19 +129,19 @@ func IPCClientQuit(stopTunnelsOnQuit bool) (bool, error) {
return alreadyQuit, rpcClient.Call("ManagerService.Quit", stopTunnelsOnQuit, &alreadyQuit)
}
-func IPCClientRegisterTunnelChange(cb func(tunnel string, state TunnelState)) *tunnelChangeCallback {
- s := &tunnelChangeCallback{cb}
+func IPCClientRegisterTunnelChange(cb func(tunnel *Tunnel, state TunnelState)) *TunnelChangeCallback {
+ s := &TunnelChangeCallback{cb}
tunnelChangeCallbacks[s] = true
return s
}
-func IPCClientUnregisterTunnelChange(cb *tunnelChangeCallback) {
+func IPCClientUnregisterTunnelChange(cb *TunnelChangeCallback) {
delete(tunnelChangeCallbacks, cb)
}
-func IPCClientRegisterTunnelsChange(cb func()) *tunnelsChangeCallback {
- s := &tunnelsChangeCallback{cb}
+func IPCClientRegisterTunnelsChange(cb func()) *TunnelsChangeCallback {
+ s := &TunnelsChangeCallback{cb}
tunnelsChangeCallbacks[s] = true
return s
}
-func IPCClientUnregisterTunnelsChange(cb *tunnelsChangeCallback) {
+func IPCClientUnregisterTunnelsChange(cb *TunnelsChangeCallback) {
delete(tunnelsChangeCallbacks, cb)
}