diff --git a/a8/websocketclient.cc b/a8/websocketclient.cc index 1605687..041dc12 100644 --- a/a8/websocketclient.cc +++ b/a8/websocketclient.cc @@ -4,6 +4,32 @@ #ifdef USE_BOOST +static const unsigned char FIN = 0x80; +static const unsigned char RSV1 = 0x40; +static const unsigned char RSV2 = 0x20; +static const unsigned char RSV3 = 0x10; +static const unsigned char RSV_MASK = RSV1 | RSV2 | RSV3; +static const unsigned char OPCODE_MASK = 0x0F; + +static const unsigned char TEXT_MODE = 0x01; +static const unsigned char BINARY_MODE = 0x02; + +static const unsigned char WEBSOCKET_OPCODE = 0x0F; +static const unsigned char WEBSOCKET_FRAME_CONTINUE = 0x0; +static const unsigned char WEBSOCKET_FRAME_TEXT = 0x1; +static const unsigned char WEBSOCKET_FRAME_BINARY = 0x2; +static const unsigned char WEBSOCKET_FRAME_CLOSE = 0x8; +static const unsigned char WEBSOCKET_FRAME_PING = 0x9; +static const unsigned char WEBSOCKET_FRAME_PONG = 0xA; + +static const unsigned char WEBSOCKET_MASK = 0x80; +static const unsigned char WEBSOCKET_PAYLOAD_LEN = 0x7F; +static const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT16 = 126; +static const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT64 = 127; + +static const char* WEB_SOCKET_KEY = "Sec-WebSocket-Key: "; +static const char* WEB_SOCKET_KEY2 = "Sec-Websocket-Key: "; + namespace a8 { @@ -46,6 +72,21 @@ namespace a8 if (!handshook_) { abort(); } + unsigned char szbuff [1024 * 65]; + szbuff[0] = FIN | BINARY_MODE | 0; + if (bufflen < 126) { + szbuff[1] = bufflen; + memmove(szbuff + 2, buff, bufflen); + tcp_client_->SendBuff((char*)szbuff, bufflen + 2); + } else if (bufflen <= 0xFFFF) { + szbuff[1] = 126; + szbuff[2] = (bufflen >> 8) & 0xFF; + szbuff[3] = bufflen & 0xFF; + memmove(szbuff + 4, buff, bufflen); + tcp_client_->SendBuff((char*)szbuff, bufflen + 4); + } else { + abort(); + } } } diff --git a/a8/websocketsession.cc b/a8/websocketsession.cc index 0bd4eb8..a723b98 100644 --- a/a8/websocketsession.cc +++ b/a8/websocketsession.cc @@ -9,31 +9,31 @@ #include #include -const unsigned char FIN = 0x80; -const unsigned char RSV1 = 0x40; -const unsigned char RSV2 = 0x20; -const unsigned char RSV3 = 0x10; -const unsigned char RSV_MASK = RSV1 | RSV2 | RSV3; -const unsigned char OPCODE_MASK = 0x0F; +static const unsigned char FIN = 0x80; +static const unsigned char RSV1 = 0x40; +static const unsigned char RSV2 = 0x20; +static const unsigned char RSV3 = 0x10; +static const unsigned char RSV_MASK = RSV1 | RSV2 | RSV3; +static const unsigned char OPCODE_MASK = 0x0F; -const unsigned char TEXT_MODE = 0x01; -const unsigned char BINARY_MODE = 0x02; +static const unsigned char TEXT_MODE = 0x01; +static const unsigned char BINARY_MODE = 0x02; -const unsigned char WEBSOCKET_OPCODE = 0x0F; -const unsigned char WEBSOCKET_FRAME_CONTINUE = 0x0; -const unsigned char WEBSOCKET_FRAME_TEXT = 0x1; -const unsigned char WEBSOCKET_FRAME_BINARY = 0x2; -const unsigned char WEBSOCKET_FRAME_CLOSE = 0x8; -const unsigned char WEBSOCKET_FRAME_PING = 0x9; -const unsigned char WEBSOCKET_FRAME_PONG = 0xA; +static const unsigned char WEBSOCKET_OPCODE = 0x0F; +static const unsigned char WEBSOCKET_FRAME_CONTINUE = 0x0; +static const unsigned char WEBSOCKET_FRAME_TEXT = 0x1; +static const unsigned char WEBSOCKET_FRAME_BINARY = 0x2; +static const unsigned char WEBSOCKET_FRAME_CLOSE = 0x8; +static const unsigned char WEBSOCKET_FRAME_PING = 0x9; +static const unsigned char WEBSOCKET_FRAME_PONG = 0xA; -const unsigned char WEBSOCKET_MASK = 0x80; -const unsigned char WEBSOCKET_PAYLOAD_LEN = 0x7F; -const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT16 = 126; -const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT64 = 127; +static const unsigned char WEBSOCKET_MASK = 0x80; +static const unsigned char WEBSOCKET_PAYLOAD_LEN = 0x7F; +static const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT16 = 126; +static const unsigned char WEBSOCKET_PAYLOAD_LEN_UINT64 = 127; -const char* WEB_SOCKET_KEY = "Sec-WebSocket-Key: "; -const char* WEB_SOCKET_KEY2 = "Sec-Websocket-Key: "; +static const char* WEB_SOCKET_KEY = "Sec-WebSocket-Key: "; +static const char* WEB_SOCKET_KEY2 = "Sec-Websocket-Key: "; namespace a8 {