mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
add U_WS_MESSAGE_TYPE_BROTLI
This commit is contained in:
parent
be31bfab31
commit
f3c8c10470
|
@ -67,7 +67,7 @@ public:
|
||||||
U_RETURN(false);
|
U_RETURN(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sendMessage(const UString& msg, int type = U_WS_MESSAGE_TYPE_TEXT)
|
bool sendMessage(const UString& msg, int type = U_WS_MESSAGE_TYPE_TEXT) // U_WS_MESSAGE_TYPE_BROTLI
|
||||||
{
|
{
|
||||||
U_TRACE(0, "UWebSocketClient::sendMessage(%V,%d)", msg.rep, type)
|
U_TRACE(0, "UWebSocketClient::sendMessage(%V,%d)", msg.rep, type)
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define U_WS_MESSAGE_TYPE_INVALID -1
|
#define U_WS_MESSAGE_TYPE_INVALID -1
|
||||||
#define U_WS_MESSAGE_TYPE_TEXT 0
|
#define U_WS_MESSAGE_TYPE_TEXT 0
|
||||||
|
#define U_WS_MESSAGE_TYPE_BROTLI 6
|
||||||
#define U_WS_MESSAGE_TYPE_BINARY 128
|
#define U_WS_MESSAGE_TYPE_BINARY 128
|
||||||
#define U_WS_MESSAGE_TYPE_CLOSE 255
|
#define U_WS_MESSAGE_TYPE_CLOSE 255
|
||||||
#define U_WS_MESSAGE_TYPE_PING 256
|
#define U_WS_MESSAGE_TYPE_PING 256
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
#define U_WS_OPCODE_CONTINUATION 0x0
|
#define U_WS_OPCODE_CONTINUATION 0x0
|
||||||
#define U_WS_OPCODE_TEXT 0x1
|
#define U_WS_OPCODE_TEXT 0x1
|
||||||
#define U_WS_OPCODE_BINARY 0x2
|
#define U_WS_OPCODE_BINARY 0x2
|
||||||
|
#define U_WS_OPCODE_BROTLI 0x6
|
||||||
#define U_WS_OPCODE_CLOSE 0x8
|
#define U_WS_OPCODE_CLOSE 0x8
|
||||||
#define U_WS_OPCODE_PING 0x9
|
#define U_WS_OPCODE_PING 0x9
|
||||||
#define U_WS_OPCODE_PONG 0xA
|
#define U_WS_OPCODE_PONG 0xA
|
||||||
|
|
|
@ -76,7 +76,7 @@ if (isMessageForAnotherUSP(*UWebSocket::message))
|
||||||
}
|
}
|
||||||
else if (isMessageForAnotherWebSocket(*UWebSocket::message))
|
else if (isMessageForAnotherWebSocket(*UWebSocket::message))
|
||||||
{
|
{
|
||||||
if (wsclient->connectServer(U_STRING_FROM_CONSTANT("ws://localhost:8888/websocket"))) (void) wsclient->sendMessage(*UWebSocket::message);
|
if (wsclient->connectServer(U_STRING_FROM_CONSTANT("ws://localhost:8888/websocket"))) (void) wsclient->sendMessage(*UWebSocket::message, U_WS_MESSAGE_TYPE_BROTLI);
|
||||||
|
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,8 +83,6 @@ USocket::USocket(bool bSocketIsIPv6, int fd)
|
||||||
U_TRACE_CTOR(0, USocket, "%b,%d", bSocketIsIPv6, fd)
|
U_TRACE_CTOR(0, USocket, "%b,%d", bSocketIsIPv6, fd)
|
||||||
|
|
||||||
flags = O_RDWR;
|
flags = O_RDWR;
|
||||||
iState = CLOSE;
|
|
||||||
iSockDesc = fd;
|
|
||||||
iLocalPort =
|
iLocalPort =
|
||||||
iRemotePort = 0;
|
iRemotePort = 0;
|
||||||
|
|
||||||
|
@ -94,9 +92,21 @@ USocket::USocket(bool bSocketIsIPv6, int fd)
|
||||||
U_socket_IPv6(this) = false;
|
U_socket_IPv6(this) = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
U_socket_Type(this) = 0;
|
|
||||||
U_socket_LocalSet(this) = false;
|
U_socket_LocalSet(this) = false;
|
||||||
|
|
||||||
|
if (fd == -1)
|
||||||
|
{
|
||||||
|
iSockDesc = -1;
|
||||||
|
iState = CLOSE;
|
||||||
|
U_socket_Type(this) = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iSockDesc = fd;
|
||||||
|
iState = CONNECT;
|
||||||
|
U_socket_Type(this) = SK_STREAM;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _MSWINDOWS_
|
#ifdef _MSWINDOWS_
|
||||||
fh = fd;
|
fh = fd;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -175,7 +175,7 @@ loop:
|
||||||
{
|
{
|
||||||
status_code = U_WS_STATUS_CODE_INTERNAL_ERROR;
|
status_code = U_WS_STATUS_CODE_INTERNAL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
block = (unsigned char*) rbuffer->data();
|
block = (unsigned char*) rbuffer->data();
|
||||||
|
@ -199,7 +199,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
fin = U_WS_FRAME_GET_FIN( block[block_offset]);
|
fin = U_WS_FRAME_GET_FIN( block[block_offset]);
|
||||||
|
@ -217,7 +217,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame = &UWebSocket::control_frame;
|
frame = &UWebSocket::control_frame;
|
||||||
|
@ -236,7 +236,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->opcode = opcode;
|
frame->opcode = opcode;
|
||||||
|
@ -249,7 +249,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->fin = fin;
|
frame->fin = fin;
|
||||||
|
@ -295,7 +295,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
framing_state = U_WS_DATA_FRAMING_PAYLOAD_LENGTH_EXT; // 3
|
framing_state = U_WS_DATA_FRAMING_PAYLOAD_LENGTH_EXT; // 3
|
||||||
|
@ -329,7 +329,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_MESSAGE_TOO_LARGE; // Invalid payload length
|
status_code = U_WS_STATUS_CODE_MESSAGE_TOO_LARGE; // Invalid payload length
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_MESSAGE_TOO_LARGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (masking == 0)
|
if (masking == 0)
|
||||||
|
@ -490,7 +490,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_INVALID_UTF8;
|
status_code = U_WS_STATUS_CODE_INVALID_UTF8;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_INVALID_UTF8);
|
||||||
}
|
}
|
||||||
|
|
||||||
message_type = U_WS_MESSAGE_TYPE_TEXT;
|
message_type = U_WS_MESSAGE_TYPE_TEXT;
|
||||||
|
@ -498,6 +498,7 @@ loop:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U_WS_OPCODE_BINARY: message_type = U_WS_MESSAGE_TYPE_BINARY; break;
|
case U_WS_OPCODE_BINARY: message_type = U_WS_MESSAGE_TYPE_BINARY; break;
|
||||||
|
case U_WS_OPCODE_BROTLI: message_type = U_WS_MESSAGE_TYPE_BROTLI; break;
|
||||||
|
|
||||||
case U_WS_OPCODE_CLOSE:
|
case U_WS_OPCODE_CLOSE:
|
||||||
{
|
{
|
||||||
|
@ -505,7 +506,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_OK;
|
status_code = U_WS_STATUS_CODE_OK;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
case U_WS_OPCODE_PING:
|
case U_WS_OPCODE_PING:
|
||||||
|
@ -514,7 +515,7 @@ loop:
|
||||||
{
|
{
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -527,7 +528,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -547,7 +548,15 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_OK;
|
status_code = U_WS_STATUS_CODE_OK;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
# ifdef USE_LIBBROTLI
|
||||||
|
if (message_type == U_WS_MESSAGE_TYPE_BROTLI &&
|
||||||
|
UStringExt::isBrotli(*message))
|
||||||
|
{
|
||||||
|
*message = UStringExt::unbrotli(*message);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
U_RETURN(U_WS_STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->application_data = U_NULLPTR;
|
frame->application_data = U_NULLPTR;
|
||||||
|
@ -569,7 +578,7 @@ loop:
|
||||||
|
|
||||||
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
status_code = U_WS_STATUS_CODE_PROTOCOL_ERROR;
|
||||||
|
|
||||||
U_RETURN(status_code);
|
U_RETURN(U_WS_STATUS_CODE_PROTOCOL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -591,7 +600,7 @@ bool UWebSocket::sendData(USocket* socket, int type, const char* data, uint32_t
|
||||||
uint8_t opcode, masking_key[4];
|
uint8_t opcode, masking_key[4];
|
||||||
uint32_t header_length = 6U + (len > 125U ? 2U : 0) + (len > 0xffff ? 8U : 0), ncount = header_length + len;
|
uint32_t header_length = 6U + (len > 125U ? 2U : 0) + (len > 0xffff ? 8U : 0), ncount = header_length + len;
|
||||||
|
|
||||||
UString tmp(ncount);
|
UString tmp(ncount), compressed;
|
||||||
unsigned char* header = (unsigned char*)tmp.data();
|
unsigned char* header = (unsigned char*)tmp.data();
|
||||||
|
|
||||||
*((uint32_t*)masking_key) = u_get_num_random();
|
*((uint32_t*)masking_key) = u_get_num_random();
|
||||||
|
@ -603,6 +612,24 @@ bool UWebSocket::sendData(USocket* socket, int type, const char* data, uint32_t
|
||||||
opcode = U_WS_OPCODE_TEXT;
|
opcode = U_WS_OPCODE_TEXT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case U_WS_MESSAGE_TYPE_BROTLI:
|
||||||
|
{
|
||||||
|
opcode = U_WS_OPCODE_TEXT;
|
||||||
|
|
||||||
|
# ifdef USE_LIBBROTLI
|
||||||
|
if (compressed = UStringExt::brotli(data, len, (U_PARALLELIZATION_CHILD ? BROTLI_MAX_QUALITY : UHTTP::brotli_level_for_dynamic_content)))
|
||||||
|
{
|
||||||
|
opcode = U_WS_OPCODE_BROTLI;
|
||||||
|
|
||||||
|
len = compressed.size();
|
||||||
|
data = compressed.data();
|
||||||
|
|
||||||
|
U_SRV_LOG("websocket compressed request: %u bytes - (%u%%) brotli compression ratio", len, 100-UStringExt::ratio);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case U_WS_MESSAGE_TYPE_PING: opcode = U_WS_OPCODE_PING; break;
|
case U_WS_MESSAGE_TYPE_PING: opcode = U_WS_OPCODE_PING; break;
|
||||||
case U_WS_MESSAGE_TYPE_PONG: opcode = U_WS_OPCODE_PONG; break;
|
case U_WS_MESSAGE_TYPE_PONG: opcode = U_WS_OPCODE_PONG; break;
|
||||||
case U_WS_MESSAGE_TYPE_BINARY: opcode = U_WS_OPCODE_BINARY; break;
|
case U_WS_MESSAGE_TYPE_BINARY: opcode = U_WS_OPCODE_BINARY; break;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
0424
|
0432
|
||||||
|
|
Loading…
Reference in New Issue
Block a user