mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
167 lines
5.5 KiB
Go
167 lines
5.5 KiB
Go
package guac
|
|
|
|
type Status int
|
|
|
|
const (
|
|
// Undefined Add to instead null
|
|
Undefined Status = -1
|
|
|
|
// Success indicates the operation succeeded.
|
|
Success Status = iota
|
|
|
|
// Unsupported indicates the requested operation is unsupported.
|
|
Unsupported
|
|
|
|
// ServerError indicates the operation could not be performed due to an internal failure.
|
|
ServerError
|
|
|
|
// ServerBusy indicates the operation could not be performed as the server is busy.
|
|
ServerBusy
|
|
|
|
// UpstreamTimeout indicates the operation could not be performed because the upstream server is not responding.
|
|
UpstreamTimeout
|
|
|
|
// UpstreamError indicates the operation was unsuccessful due to an error or otherwise unexpected
|
|
// condition of the upstream server.
|
|
UpstreamError
|
|
|
|
// ResourceNotFound indicates the operation could not be performed as the requested resource does not exist.
|
|
ResourceNotFound
|
|
|
|
// ResourceConflict indicates the operation could not be performed as the requested resource is already in use.
|
|
ResourceConflict
|
|
|
|
// ResourceClosed indicates the operation could not be performed as the requested resource is now closed.
|
|
ResourceClosed
|
|
|
|
// UpstreamNotFound indicates the operation could not be performed because the upstream server does
|
|
// not appear to exist.
|
|
UpstreamNotFound
|
|
|
|
// UpstreamUnavailable indicates the operation could not be performed because the upstream server is not
|
|
// available to service the request.
|
|
UpstreamUnavailable
|
|
|
|
// SessionConflict indicates the session within the upstream server has ended because it conflicted
|
|
// with another session.
|
|
SessionConflict
|
|
|
|
// SessionTimeout indicates the session within the upstream server has ended because it appeared to be inactive.
|
|
SessionTimeout
|
|
|
|
// SessionClosed indicates the session within the upstream server has been forcibly terminated.
|
|
SessionClosed
|
|
|
|
// ClientBadRequest indicates the operation could not be performed because bad parameters were given.
|
|
ClientBadRequest
|
|
|
|
// ClientUnauthorized indicates the user is not authorized.
|
|
ClientUnauthorized
|
|
|
|
// ClientForbidden indicates the user is not allowed to do the operation.
|
|
ClientForbidden
|
|
|
|
// ClientTimeout indicates the client took too long to respond.
|
|
ClientTimeout
|
|
|
|
// ClientOverrun indicates the client sent too much data.
|
|
ClientOverrun
|
|
|
|
// ClientBadType indicates the client sent data of an unsupported or unexpected type.
|
|
ClientBadType
|
|
|
|
// ClientTooMany indivates the operation failed because the current client is already using too many resources.
|
|
ClientTooMany
|
|
)
|
|
|
|
type statusData struct {
|
|
name string
|
|
// The most applicable HTTP error code.
|
|
httpCode int
|
|
|
|
// The most applicable WebSocket error code.
|
|
websocketCode int
|
|
|
|
// The Guacamole protocol Status code.
|
|
guacCode int
|
|
}
|
|
|
|
func newStatusData(name string, httpCode, websocketCode, guacCode int) (ret statusData) {
|
|
ret.name = name
|
|
ret.httpCode = httpCode
|
|
ret.websocketCode = websocketCode
|
|
ret.guacCode = guacCode
|
|
return
|
|
}
|
|
|
|
var guacamoleStatusMap = map[Status]statusData{
|
|
Success: newStatusData("Success", 200, 1000, 0x0000),
|
|
Unsupported: newStatusData("Unsupported", 501, 1011, 0x0100),
|
|
ServerError: newStatusData("SERVER_ERROR", 500, 1011, 0x0200),
|
|
ServerBusy: newStatusData("SERVER_BUSY", 503, 1008, 0x0201),
|
|
UpstreamTimeout: newStatusData("UPSTREAM_TIMEOUT", 504, 1011, 0x0202),
|
|
UpstreamError: newStatusData("UPSTREAM_ERROR", 502, 1011, 0x0203),
|
|
ResourceNotFound: newStatusData("RESOURCE_NOT_FOUND", 404, 1002, 0x0204),
|
|
ResourceConflict: newStatusData("RESOURCE_CONFLICT", 409, 1008, 0x0205),
|
|
ResourceClosed: newStatusData("RESOURCE_CLOSED", 404, 1002, 0x0206),
|
|
UpstreamNotFound: newStatusData("UPSTREAM_NOT_FOUND", 502, 1011, 0x0207),
|
|
UpstreamUnavailable: newStatusData("UPSTREAM_UNAVAILABLE", 502, 1011, 0x0208),
|
|
SessionConflict: newStatusData("SESSION_CONFLICT", 409, 1008, 0x0209),
|
|
SessionTimeout: newStatusData("SESSION_TIMEOUT", 408, 1002, 0x020A),
|
|
SessionClosed: newStatusData("SESSION_CLOSED", 404, 1002, 0x020B),
|
|
ClientBadRequest: newStatusData("CLIENT_BAD_REQUEST", 400, 1002, 0x0300),
|
|
ClientUnauthorized: newStatusData("CLIENT_UNAUTHORIZED", 403, 1008, 0x0301),
|
|
ClientForbidden: newStatusData("CLIENT_FORBIDDEN", 403, 1008, 0x0303),
|
|
ClientTimeout: newStatusData("CLIENT_TIMEOUT", 408, 1002, 0x0308),
|
|
ClientOverrun: newStatusData("CLIENT_OVERRUN", 413, 1009, 0x030D),
|
|
ClientBadType: newStatusData("CLIENT_BAD_TYPE", 415, 1003, 0x030F),
|
|
ClientTooMany: newStatusData("CLIENT_TOO_MANY", 429, 1008, 0x031D),
|
|
}
|
|
|
|
// String returns the name of the status.
|
|
func (s Status) String() string {
|
|
if v, ok := guacamoleStatusMap[s]; ok {
|
|
return v.name
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// GetHTTPStatusCode returns the most applicable HTTP error code.
|
|
func (s Status) GetHTTPStatusCode() int {
|
|
if v, ok := guacamoleStatusMap[s]; ok {
|
|
return v.httpCode
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// GetWebSocketCode returns the most applicable HTTP error code.
|
|
func (s Status) GetWebSocketCode() int {
|
|
if v, ok := guacamoleStatusMap[s]; ok {
|
|
return v.websocketCode
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// GetGuacamoleStatusCode returns the corresponding Guacamole protocol Status code.
|
|
func (s Status) GetGuacamoleStatusCode() int {
|
|
if v, ok := guacamoleStatusMap[s]; ok {
|
|
return v.guacCode
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// FromGuacamoleStatusCode returns the Status corresponding to the given Guacamole protocol Status code.
|
|
func FromGuacamoleStatusCode(code int) (ret Status) {
|
|
// Search for a Status having the given Status code
|
|
for k, v := range guacamoleStatusMap {
|
|
if v.guacCode == code {
|
|
ret = k
|
|
return
|
|
}
|
|
}
|
|
// No such Status found
|
|
ret = Undefined
|
|
return
|
|
|
|
}
|