mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-02-15 08:55:36 +08:00
!112 feat: 机器管理支持ssh+rdp连接win服务器
* feat: rdp 文件管理 * feat: 机器管理支持ssh+rdp连接win服务器
This commit is contained in:
166
server/internal/machine/guac/status.go
Normal file
166
server/internal/machine/guac/status.go
Normal file
@@ -0,0 +1,166 @@
|
||||
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
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user