xref: /unit/src/nxt_websocket_header.h (revision 1131:ec7d924d8dfb)
1*1131Smax.romanov@nginx.com 
2*1131Smax.romanov@nginx.com /*
3*1131Smax.romanov@nginx.com  * Copyright (C) NGINX, Inc.
4*1131Smax.romanov@nginx.com  */
5*1131Smax.romanov@nginx.com 
6*1131Smax.romanov@nginx.com #ifndef _NXT_WEBSOCKET_HEADER_H_INCLUDED_
7*1131Smax.romanov@nginx.com #define _NXT_WEBSOCKET_HEADER_H_INCLUDED_
8*1131Smax.romanov@nginx.com 
9*1131Smax.romanov@nginx.com #include <netinet/in.h>
10*1131Smax.romanov@nginx.com 
11*1131Smax.romanov@nginx.com 
12*1131Smax.romanov@nginx.com typedef struct {
13*1131Smax.romanov@nginx.com #if (BYTE_ORDER == BIG_ENDIAN)
14*1131Smax.romanov@nginx.com     uint8_t fin:1;
15*1131Smax.romanov@nginx.com     uint8_t rsv1:1;
16*1131Smax.romanov@nginx.com     uint8_t rsv2:1;
17*1131Smax.romanov@nginx.com     uint8_t rsv3:1;
18*1131Smax.romanov@nginx.com     uint8_t opcode:4;
19*1131Smax.romanov@nginx.com 
20*1131Smax.romanov@nginx.com     uint8_t mask:1;
21*1131Smax.romanov@nginx.com     uint8_t payload_len:7;
22*1131Smax.romanov@nginx.com #endif
23*1131Smax.romanov@nginx.com 
24*1131Smax.romanov@nginx.com #if (BYTE_ORDER == LITTLE_ENDIAN)
25*1131Smax.romanov@nginx.com     uint8_t opcode:4;
26*1131Smax.romanov@nginx.com     uint8_t rsv3:1;
27*1131Smax.romanov@nginx.com     uint8_t rsv2:1;
28*1131Smax.romanov@nginx.com     uint8_t rsv1:1;
29*1131Smax.romanov@nginx.com     uint8_t fin:1;
30*1131Smax.romanov@nginx.com 
31*1131Smax.romanov@nginx.com     uint8_t payload_len:7;
32*1131Smax.romanov@nginx.com     uint8_t mask:1;
33*1131Smax.romanov@nginx.com #endif
34*1131Smax.romanov@nginx.com 
35*1131Smax.romanov@nginx.com     uint8_t payload_len_[8];
36*1131Smax.romanov@nginx.com } nxt_websocket_header_t;
37*1131Smax.romanov@nginx.com 
38*1131Smax.romanov@nginx.com 
39*1131Smax.romanov@nginx.com enum {
40*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_CONT   = 0x00,
41*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_TEXT   = 0x01,
42*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_BINARY = 0x02,
43*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_CLOSE  = 0x08,
44*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_PING   = 0x09,
45*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_PONG   = 0x0A,
46*1131Smax.romanov@nginx.com 
47*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_OP_CTRL   = 0x08,
48*1131Smax.romanov@nginx.com };
49*1131Smax.romanov@nginx.com 
50*1131Smax.romanov@nginx.com 
51*1131Smax.romanov@nginx.com enum {
52*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_NORMAL                 = 1000,
53*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_GOING_AWAY             = 1001,
54*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_PROTOCOL_ERROR         = 1002,
55*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_UNPROCESSABLE_INPUT    = 1003,
56*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_RESERVED               = 1004,
57*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_NOT_PROVIDED           = 1005,
58*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_ABNORMAL               = 1006,
59*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_INVALID_DATA           = 1007,
60*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_POLICY_VIOLATION       = 1008,
61*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_MESSAGE_TOO_BIG        = 1009,
62*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_EXTENSION_REQUIRED     = 1010,
63*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_INTERNAL_SERVER_ERROR  = 1011,
64*1131Smax.romanov@nginx.com     NXT_WEBSOCKET_CR_TLS_HANDSHAKE_FAILED   = 1015,
65*1131Smax.romanov@nginx.com };
66*1131Smax.romanov@nginx.com 
67*1131Smax.romanov@nginx.com 
68*1131Smax.romanov@nginx.com #endif /* _NXT_WEBSOCKET_HEADER_H_INCLUDED_ */
69