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