diff options
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, + }) +} |