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