You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
package websocket |
|
|
|
import ( |
|
"errors" |
|
"fmt" |
|
) |
|
|
|
// StatusCode represents a WebSocket status code. |
|
// https://tools.ietf.org/html/rfc6455#section-7.4 |
|
type StatusCode int |
|
|
|
// https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number |
|
// |
|
// These are only the status codes defined by the protocol. |
|
// |
|
// You can define custom codes in the 3000-4999 range. |
|
// The 3000-3999 range is reserved for use by libraries, frameworks and applications. |
|
// The 4000-4999 range is reserved for private use. |
|
const ( |
|
StatusNormalClosure StatusCode = 1000 |
|
StatusGoingAway StatusCode = 1001 |
|
StatusProtocolError StatusCode = 1002 |
|
StatusUnsupportedData StatusCode = 1003 |
|
|
|
// 1004 is reserved and so unexported. |
|
statusReserved StatusCode = 1004 |
|
|
|
// StatusNoStatusRcvd cannot be sent in a close message. |
|
// It is reserved for when a close message is received without |
|
// a status code. |
|
StatusNoStatusRcvd StatusCode = 1005 |
|
|
|
// StatusAbnormalClosure is exported for use only with Wasm. |
|
// In non Wasm Go, the returned error will indicate whether the |
|
// connection was closed abnormally. |
|
StatusAbnormalClosure StatusCode = 1006 |
|
|
|
StatusInvalidFramePayloadData StatusCode = 1007 |
|
StatusPolicyViolation StatusCode = 1008 |
|
StatusMessageTooBig StatusCode = 1009 |
|
StatusMandatoryExtension StatusCode = 1010 |
|
StatusInternalError StatusCode = 1011 |
|
StatusServiceRestart StatusCode = 1012 |
|
StatusTryAgainLater StatusCode = 1013 |
|
StatusBadGateway StatusCode = 1014 |
|
|
|
// StatusTLSHandshake is only exported for use with Wasm. |
|
// In non Wasm Go, the returned error will indicate whether there was |
|
// a TLS handshake failure. |
|
StatusTLSHandshake StatusCode = 1015 |
|
) |
|
|
|
// CloseError is returned when the connection is closed with a status and reason. |
|
// |
|
// Use Go 1.13's errors.As to check for this error. |
|
// Also see the CloseStatus helper. |
|
type CloseError struct { |
|
Code StatusCode |
|
Reason string |
|
} |
|
|
|
func (ce CloseError) Error() string { |
|
return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason) |
|
} |
|
|
|
// CloseStatus is a convenience wrapper around Go 1.13's errors.As to grab |
|
// the status code from a CloseError. |
|
// |
|
// -1 will be returned if the passed error is nil or not a CloseError. |
|
func CloseStatus(err error) StatusCode { |
|
var ce CloseError |
|
if errors.As(err, &ce) { |
|
return ce.Code |
|
} |
|
return -1 |
|
}
|
|
|