summaryrefslogtreecommitdiffhomepage
path: root/device/uapi.go
diff options
context:
space:
mode:
authorDavid Anderson <danderson@tailscale.com>2020-04-01 09:27:02 -0700
committerJason A. Donenfeld <Jason@zx2c4.com>2020-05-02 01:49:47 -0600
commitf2c6faad44fa70cdc8ef80385ca9826bbf0468d9 (patch)
tree522a3dc9a2086c3c3e867dc84755019a62b7ac44 /device/uapi.go
parentc76b8184663e4b80ff8c26aafe9ec0ec91ff9116 (diff)
device: return generic error from Ipc{Get,Set}Operation.
This makes uapi.go's public API conform to Go style in terms of error types. Signed-off-by: David Anderson <danderson@tailscale.com>
Diffstat (limited to 'device/uapi.go')
-rw-r--r--device/uapi.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/device/uapi.go b/device/uapi.go
index 6cdccd6..1080ca1 100644
--- a/device/uapi.go
+++ b/device/uapi.go
@@ -7,6 +7,7 @@ package device
import (
"bufio"
+ "errors"
"fmt"
"io"
"net"
@@ -31,7 +32,7 @@ func (s IPCError) ErrorCode() int64 {
return s.int64
}
-func (device *Device) IpcGetOperation(socket *bufio.Writer) *IPCError {
+func (device *Device) IpcGetOperation(socket *bufio.Writer) error {
lines := make([]string, 0, 100)
send := func(line string) {
lines = append(lines, line)
@@ -106,7 +107,7 @@ func (device *Device) IpcGetOperation(socket *bufio.Writer) *IPCError {
return nil
}
-func (device *Device) IpcSetOperation(socket *bufio.Reader) *IPCError {
+func (device *Device) IpcSetOperation(socket *bufio.Reader) error {
scanner := bufio.NewScanner(socket)
logError := device.log.Error
logDebug := device.log.Debug
@@ -421,10 +422,20 @@ func (device *Device) IpcHandle(socket net.Conn) {
switch op {
case "set=1\n":
- status = device.IpcSetOperation(buffered.Reader)
+ err = device.IpcSetOperation(buffered.Reader)
+ if err != nil && !errors.As(err, &status) {
+ // should never happen
+ device.log.Error.Println("Invalid UAPI error:", err)
+ status = &IPCError{1}
+ }
case "get=1\n":
- status = device.IpcGetOperation(buffered.Writer)
+ err = device.IpcGetOperation(buffered.Writer)
+ if err != nil && !errors.As(err, &status) {
+ // should never happen
+ device.log.Error.Println("Invalid UAPI error:", err)
+ status = &IPCError{1}
+ }
default:
device.log.Error.Println("Invalid UAPI operation:", op)