diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-08-27 15:41:00 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-08-27 15:41:00 +0200 |
commit | 6f5ef153c3b578da99501cfcbe4f2e4a84d44708 (patch) | |
tree | 5fcdda37f8cde8be8b2f2afb3ebd6b337b0652ed /src/uapi_windows.go | |
parent | eafa3df60689d3ad2b4316c42a8360ed47072a00 (diff) |
Added code from windows branch
Diffstat (limited to 'src/uapi_windows.go')
-rw-r--r-- | src/uapi_windows.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/uapi_windows.go b/src/uapi_windows.go new file mode 100644 index 0000000..d56e965 --- /dev/null +++ b/src/uapi_windows.go @@ -0,0 +1,44 @@ +package main + +/* UAPI on windows uses a bidirectional named pipe + */ + +import ( + "fmt" + "github.com/Microsoft/go-winio" + "golang.org/x/sys/windows" + "net" +) + +const ( + ipcErrorIO = -int64(windows.ERROR_BROKEN_PIPE) + ipcErrorNotDefined = -int64(windows.ERROR_SERVICE_SPECIFIC_ERROR) + ipcErrorProtocol = -int64(windows.ERROR_SERVICE_SPECIFIC_ERROR) + ipcErrorInvalid = -int64(windows.ERROR_SERVICE_SPECIFIC_ERROR) +) + +const PipeNameFmt = "\\\\.\\pipe\\wireguard-ipc-%s" + +type UAPIListener struct { + listener net.Listener +} + +func (uapi *UAPIListener) Accept() (net.Conn, error) { + return nil, nil +} + +func (uapi *UAPIListener) Close() error { + return uapi.listener.Close() +} + +func (uapi *UAPIListener) Addr() net.Addr { + return nil +} + +func NewUAPIListener(name string) (net.Listener, error) { + path := fmt.Sprintf(PipeNameFmt, name) + return winio.ListenPipe(path, &winio.PipeConfig{ + InputBufferSize: 2048, + OutputBufferSize: 2048, + }) +} |