mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20: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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |