This commit is contained in:
azw 2023-08-19 14:02:43 +08:00
parent fe229f0bb1
commit d3671aa608
2 changed files with 21 additions and 10 deletions

View File

@ -145,19 +145,25 @@ namespace a8
} }
unsigned char szbuff [1024 * 65]; unsigned char szbuff [1024 * 65];
szbuff[0] = FIN | BINARY_MODE | 0; szbuff[0] = FIN | BINARY_MODE | 0;
if (bufflen < 126) { int mask_offset = 2;
szbuff[1] = bufflen; int payloadlen = bufflen;
memmove(szbuff + 2, buff, bufflen); if (payloadlen < 126) {
tcp_client_->SendBuff((char*)szbuff, bufflen + 2); szbuff[1] = payloadlen | 0x80;
} else if (bufflen <= 0xFFFF) { mask_offset = 2;
szbuff[1] = 126; } else if (payloadlen <= 0xFFFF) {
szbuff[2] = (bufflen >> 8) & 0xFF; szbuff[1] = 126 | 0x80;
szbuff[3] = bufflen & 0xFF; szbuff[2] = (payloadlen >> 8) & 0xFF;
memmove(szbuff + 4, buff, bufflen); szbuff[3] = payloadlen & 0xFF;
tcp_client_->SendBuff((char*)szbuff, bufflen + 4); mask_offset = 4;
} else { } else {
abort(); abort();
} }
*((int*)(szbuff + mask_offset)) = rand();
for (unsigned i = 0; i < bufflen; ++i) {
szbuff[mask_offset + 4 + i] =
((unsigned char)buff[i]) ^ szbuff[mask_offset + (i % 4)] ;
}
tcp_client_->SendBuff((char*)szbuff, bufflen + mask_offset + 4);
} }
void WebSocketClient::ProcessHandShake(char* buf, int& offset, unsigned int buflen) void WebSocketClient::ProcessHandShake(char* buf, int& offset, unsigned int buflen)

View File

@ -188,6 +188,11 @@ namespace a8
} }
} }
/*
finbit|opcode|falgs
unsigned char header FIN|BINARY_MODE
unsigned char mask_payloadlen
*/
void WebSocketSession::DecodeFrame(char* buf, int& offset, unsigned int buflen) void WebSocketSession::DecodeFrame(char* buf, int& offset, unsigned int buflen)
{ {
if (offset + 2 > (int)buflen) { if (offset + 2 > (int)buflen) {