aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-04 22:56:23 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-04 22:57:38 +0100
commit19f690be2a2d791737363a18179c49d89914bbd2 (patch)
tree2822ec4780a1b0d48ccf8d9e903fb8b385f5aa86 /service
parentconf: uapi returns hex, not base64 (diff)
downloadwireguard-windows-19f690be2a2d791737363a18179c49d89914bbd2.tar.xz
wireguard-windows-19f690be2a2d791737363a18179c49d89914bbd2.zip
manager: connect to tunnel for runtime config
Diffstat (limited to 'service')
-rw-r--r--service/ipc_server.go26
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
}