diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-04 22:56:23 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-04 22:57:38 +0100 |
commit | b6568895df5dbac1d535b8c339d04d686b06ecd1 (patch) | |
tree | 2822ec4780a1b0d48ccf8d9e903fb8b385f5aa86 /service/ipc_server.go | |
parent | conf: uapi returns hex, not base64 (diff) | |
download | wireguard-windows-b6568895df5dbac1d535b8c339d04d686b06ecd1.tar.xz wireguard-windows-b6568895df5dbac1d535b8c339d04d686b06ecd1.zip |
manager: connect to tunnel for runtime config
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'service/ipc_server.go')
-rw-r--r-- | service/ipc_server.go | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/service/ipc_server.go b/service/ipc_server.go index c79748db..ed239d85 100644 --- a/service/ipc_server.go +++ b/service/ipc_server.go @@ -8,8 +8,10 @@ package service import ( "bytes" "encoding/gob" + "github.com/Microsoft/go-winio" "golang.org/x/sys/windows/svc" "golang.zx2c4.com/wireguard/windows/conf" + "io/ioutil" "net/rpc" "os" "sync" @@ -37,8 +39,28 @@ func (s *ManagerService) StoredConfig(tunnelName string, config *conf.Config) er } func (s *ManagerService) RuntimeConfig(tunnelName string, config *conf.Config) error { - //TODO - + storedConfig, err := conf.LoadFromName(tunnelName) + if err != nil { + return err + } + pipe, err := winio.DialPipe("\\\\.\\pipe\\wireguard\\"+storedConfig.Name, nil) + if err != nil { + return err + } + _, err = pipe.Write([]byte("get=1\n\n")) + if err != nil { + return err + } + resp, err := ioutil.ReadAll(pipe) + if err != nil { + return err + } + pipe.Close() + runtimeConfig, err := conf.FromUAPI(string(resp), storedConfig) + if err != nil { + return err + } + *config = *runtimeConfig return nil } |