github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/vendor_skip/nhooyr.io/websocket/close.go (about)

     1  package websocket
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  )
     7  
     8  // StatusCode represents a WebSocket status code.
     9  // https://tools.ietf.org/html/rfc6455#section-7.4
    10  type StatusCode int
    11  
    12  // https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number
    13  //
    14  // These are only the status codes defined by the protocol.
    15  //
    16  // You can define custom codes in the 3000-4999 range.
    17  // The 3000-3999 range is reserved for use by libraries, frameworks and applications.
    18  // The 4000-4999 range is reserved for private use.
    19  const (
    20  	StatusNormalClosure   StatusCode = 1000
    21  	StatusGoingAway       StatusCode = 1001
    22  	StatusProtocolError   StatusCode = 1002
    23  	StatusUnsupportedData StatusCode = 1003
    24  
    25  	// 1004 is reserved and so unexported.
    26  	statusReserved StatusCode = 1004
    27  
    28  	// StatusNoStatusRcvd cannot be sent in a close message.
    29  	// It is reserved for when a close message is received without
    30  	// a status code.
    31  	StatusNoStatusRcvd StatusCode = 1005
    32  
    33  	// StatusAbnormalClosure is exported for use only with Wasm.
    34  	// In non Wasm Go, the returned error will indicate whether the
    35  	// connection was closed abnormally.
    36  	StatusAbnormalClosure StatusCode = 1006
    37  
    38  	StatusInvalidFramePayloadData StatusCode = 1007
    39  	StatusPolicyViolation         StatusCode = 1008
    40  	StatusMessageTooBig           StatusCode = 1009
    41  	StatusMandatoryExtension      StatusCode = 1010
    42  	StatusInternalError           StatusCode = 1011
    43  	StatusServiceRestart          StatusCode = 1012
    44  	StatusTryAgainLater           StatusCode = 1013
    45  	StatusBadGateway              StatusCode = 1014
    46  
    47  	// StatusTLSHandshake is only exported for use with Wasm.
    48  	// In non Wasm Go, the returned error will indicate whether there was
    49  	// a TLS handshake failure.
    50  	StatusTLSHandshake StatusCode = 1015
    51  )
    52  
    53  // CloseError is returned when the connection is closed with a status and reason.
    54  //
    55  // Use Go 1.13's errors.As to check for this error.
    56  // Also see the CloseStatus helper.
    57  type CloseError struct {
    58  	Code   StatusCode
    59  	Reason string
    60  }
    61  
    62  func (ce CloseError) Error() string {
    63  	return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason)
    64  }
    65  
    66  // CloseStatus is a convenience wrapper around Go 1.13's errors.As to grab
    67  // the status code from a CloseError.
    68  //
    69  // -1 will be returned if the passed error is nil or not a CloseError.
    70  func CloseStatus(err error) StatusCode {
    71  	var ce CloseError
    72  	if errors.As(err, &ce) {
    73  		return ce.Code
    74  	}
    75  	return -1
    76  }