diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-20 14:18:01 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-20 14:18:01 +0200 |
commit | cdb8c53cdea8d8ac6e6f2112e4a5e844bffd01a4 (patch) | |
tree | db88ec568dfc508da863e67164de909448c66742 /services/errors.go | |
parent | service: move route monitor and account for changing index (diff) | |
download | wireguard-windows-cdb8c53cdea8d8ac6e6f2112e4a5e844bffd01a4.tar.xz wireguard-windows-cdb8c53cdea8d8ac6e6f2112e4a5e844bffd01a4.zip |
service: split into tunnel and manager
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'services/errors.go')
-rw-r--r-- | services/errors.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/services/errors.go b/services/errors.go new file mode 100644 index 00000000..c9b2c049 --- /dev/null +++ b/services/errors.go @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved. + */ + +package services + +import ( + "fmt" + "syscall" + + "golang.org/x/sys/windows" +) + +type Error uint32 + +const ( + ErrorSuccess Error = iota + ErrorRingloggerOpen + ErrorLoadConfiguration + ErrorCreateWintun + ErrorDetermineWintunName + ErrorUAPIListen + ErrorDNSLookup + ErrorFirewall + ErrorDeviceSetConfig + ErrorBindSocketsToDefaultRoutes + ErrorSetNetConfig + ErrorDetermineExecutablePath + ErrorOpenNULFile + ErrorTrackTunnels + ErrorEnumerateSessions + ErrorDropPrivileges + ErrorWin32 +) + +func (e Error) Error() string { + switch e { + case ErrorSuccess: + return "No error" + case ErrorRingloggerOpen: + return "Unable to open log file" + case ErrorDetermineExecutablePath: + return "Unable to determine path of running executable" + case ErrorLoadConfiguration: + return "Unable to load configuration from path" + case ErrorCreateWintun: + return "Unable to create Wintun device" + case ErrorDetermineWintunName: + return "Unable to determine Wintun name" + case ErrorUAPIListen: + return "Unable to listen on named pipe" + case ErrorDNSLookup: + return "Unable to resolve one or more DNS hostname endpoints" + case ErrorFirewall: + return "Unable to enable firewall rules" + case ErrorDeviceSetConfig: + return "Unable to set device configuration" + case ErrorBindSocketsToDefaultRoutes: + return "Unable to bind sockets to default route" + case ErrorSetNetConfig: + return "Unable to set interface addresses, routes, dns, and/or adapter settings" + case ErrorOpenNULFile: + return "Unable to open NUL file" + case ErrorTrackTunnels: + return "Unable to track existing tunnels" + case ErrorEnumerateSessions: + return "Unable to enumerate current sessions" + case ErrorDropPrivileges: + return "Unable to drop privileges" + case ErrorWin32: + return "An internal Windows error has occurred" + default: + return "An unknown error has occurred" + } +} + +func DetermineErrorCode(err error, serviceError Error) (bool, uint32) { + if syserr, ok := err.(syscall.Errno); ok { + return false, uint32(syserr) + } else if serviceError != ErrorSuccess { + return true, uint32(serviceError) + } else { + return false, windows.NO_ERROR + } +} + +func CombineErrors(err error, serviceError Error) error { + if serviceError != ErrorSuccess { + if err != nil { + return fmt.Errorf("%v: %v", serviceError, err) + } + return serviceError + } + return err +} |