summaryrefslogtreecommitdiff
path: root/vendor/github.com/cretz/bine/control/status.go
blob: 8be3464e5f7b9a00f124bdb9a31f289ccf40fa77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package control

import (
	"fmt"
	"net/textproto"
	"strings"
)

// The various control port StatusCode constants.
const (
	StatusOk            = 250
	StatusOkUnnecessary = 251

	StatusErrResourceExhausted      = 451
	StatusErrSyntaxError            = 500
	StatusErrUnrecognizedCmd        = 510
	StatusErrUnimplementedCmd       = 511
	StatusErrSyntaxErrorArg         = 512
	StatusErrUnrecognizedCmdArg     = 513
	StatusErrAuthenticationRequired = 514
	StatusErrBadAuthentication      = 515
	StatusErrUnspecifiedTorError    = 550
	StatusErrInternalError          = 551
	StatusErrUnrecognizedEntity     = 552
	StatusErrInvalidConfigValue     = 553
	StatusErrInvalidDescriptor      = 554
	StatusErrUnmanagedEntity        = 555

	StatusAsyncEvent = 650
)

var statusCodeStringMap = map[int]string{
	StatusOk:            "OK",
	StatusOkUnnecessary: "Operation was unnecessary",

	StatusErrResourceExhausted:      "Resource exhausted",
	StatusErrSyntaxError:            "Syntax error: protocol",
	StatusErrUnrecognizedCmd:        "Unrecognized command",
	StatusErrUnimplementedCmd:       "Unimplemented command",
	StatusErrSyntaxErrorArg:         "Syntax error in command argument",
	StatusErrUnrecognizedCmdArg:     "Unrecognized command argument",
	StatusErrAuthenticationRequired: "Authentication required",
	StatusErrBadAuthentication:      "Bad authentication",
	StatusErrUnspecifiedTorError:    "Unspecified Tor error",
	StatusErrInternalError:          "Internal error",
	StatusErrUnrecognizedEntity:     "Unrecognized entity",
	StatusErrInvalidConfigValue:     "Invalid configuration value",
	StatusErrInvalidDescriptor:      "Invalid descriptor",
	StatusErrUnmanagedEntity:        "Unmanaged entity",

	StatusAsyncEvent: "Asynchronous event notification",
}

func statusCodeToError(code int, reply string) *textproto.Error {
	err := new(textproto.Error)
	err.Code = code
	if msg, ok := statusCodeStringMap[code]; ok {
		trimmedReply := strings.TrimSpace(strings.TrimPrefix(reply, msg))
		err.Msg = fmt.Sprintf("%s: %s", msg, trimmedReply)
	} else {
		err.Msg = fmt.Sprintf("Unknown status code (%03d): %s", code, reply)
	}
	return err
}