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