I had broken this for NT4 compat earlier, i manually reimplemented ntohll inline in the tlen == 127 check
This commit is contained in:
@@ -22,7 +22,7 @@ int OpenWebSocket(const char *hostname, const char *path, SSL **out_ssl) {
|
|||||||
server.sin_addr = **(struct in_addr **)gethostbyname(hostname)->h_addr_list;
|
server.sin_addr = **(struct in_addr **)gethostbyname(hostname)->h_addr_list;
|
||||||
|
|
||||||
if (connect(sock, (struct sockaddr *)&server, sizeof(server)) ==
|
if (connect(sock, (struct sockaddr *)&server, sizeof(server)) ==
|
||||||
SOCKET_ERROR) {
|
SOCKET_ERROR) {
|
||||||
MessageBoxA(NULL, "connect failed", "WebSocket Error", 0);
|
MessageBoxA(NULL, "connect failed", "WebSocket Error", 0);
|
||||||
closesocket(sock);
|
closesocket(sock);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -64,14 +64,14 @@ int OpenWebSocket(const char *hostname, const char *path, SSL **out_ssl) {
|
|||||||
// send WebSocket upgrade request
|
// send WebSocket upgrade request
|
||||||
char request[2048];
|
char request[2048];
|
||||||
wsprintfA(request,
|
wsprintfA(request,
|
||||||
"GET %s HTTP/1.1\r\n"
|
"GET %s HTTP/1.1\r\n"
|
||||||
"Host: %s\r\n"
|
"Host: %s\r\n"
|
||||||
"Upgrade: websocket\r\n"
|
"Upgrade: websocket\r\n"
|
||||||
"Connection: Upgrade\r\n"
|
"Connection: Upgrade\r\n"
|
||||||
"Sec-WebSocket-Key: %s\r\n"
|
"Sec-WebSocket-Key: %s\r\n"
|
||||||
"Sec-WebSocket-Version: 13\r\n"
|
"Sec-WebSocket-Version: 13\r\n"
|
||||||
"\r\n",
|
"\r\n",
|
||||||
path, hostname, ws_key);
|
path, hostname, ws_key);
|
||||||
|
|
||||||
SSL_write(ssl, request, (int)strlen(request));
|
SSL_write(ssl, request, (int)strlen(request));
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ DWORD WINAPI WSThreadProc(LPVOID ssl) {
|
|||||||
|
|
||||||
if (length != 0 && result != 0) {
|
if (length != 0 && result != 0) {
|
||||||
WebSocketOnDataArrival(ssl, buffer, length);
|
WebSocketOnDataArrival(ssl, buffer, length);
|
||||||
// printf("%s\n",buffer);
|
printf("%s\n", buffer);
|
||||||
// LE IMPORTANT: free the buffer after processing... memleak goez
|
// LE IMPORTANT: free the buffer after processing... memleak goez
|
||||||
// brr otherewise
|
// brr otherewise
|
||||||
free(buffer);
|
free(buffer);
|
||||||
@@ -117,7 +117,8 @@ DWORD WINAPI WSThreadProc(LPVOID ssl) {
|
|||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
int SendWebSocket(SSL *ssl, const char *data, size_t length,
|
int SendWebSocket(SSL *ssl, const char *data, size_t length,
|
||||||
unsigned char flags) {
|
unsigned char flags) {
|
||||||
|
printf("%s\n", data);
|
||||||
unsigned char frame[14];
|
unsigned char frame[14];
|
||||||
size_t frame_size = 0;
|
size_t frame_size = 0;
|
||||||
|
|
||||||
@@ -153,7 +154,8 @@ int SendWebSocket(SSL *ssl, const char *data, size_t length,
|
|||||||
mask[i] = (unsigned char)(i & 0xFF);
|
mask[i] = (unsigned char)(i & 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlCopyMemory(&frame[frame_size], mask, 4); // me when i rtlcopymemory to look cool
|
RtlCopyMemory(&frame[frame_size], mask,
|
||||||
|
4); // me when i rtlcopymemory to look cool
|
||||||
frame_size += 4;
|
frame_size += 4;
|
||||||
|
|
||||||
// Send frame header
|
// Send frame header
|
||||||
@@ -200,8 +202,15 @@ int ReadWebSocket(SSL *ssl, char **out_buffer, size_t *out_length) {
|
|||||||
SSL_read(ssl, &plHeaders, 1);
|
SSL_read(ssl, &plHeaders, 1);
|
||||||
unsigned char tlen = (plHeaders << 1) >> 1;
|
unsigned char tlen = (plHeaders << 1) >> 1;
|
||||||
if (tlen == 127) {
|
if (tlen == 127) {
|
||||||
SSL_read(ssl, &curPayloadLen, 8);
|
unsigned char lenbytes[8];
|
||||||
curPayloadLen = ntohl(curPayloadLen);
|
SSL_read(ssl, lenbytes,8);
|
||||||
|
curPayloadLen = 0;
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
unsigned char temp = lenbytes[i];
|
||||||
|
lenbytes[i]=lenbytes[7-i];
|
||||||
|
lenbytes[7-i]=temp;
|
||||||
|
}
|
||||||
|
curPayloadLen = *(unsigned long long*)lenbytes;
|
||||||
payloadLen += curPayloadLen;
|
payloadLen += curPayloadLen;
|
||||||
} else if (tlen == 126) {
|
} else if (tlen == 126) {
|
||||||
unsigned short templen;
|
unsigned short templen;
|
||||||
@@ -222,8 +231,8 @@ int ReadWebSocket(SSL *ssl, char **out_buffer, size_t *out_length) {
|
|||||||
unsigned long long totalRead = 0;
|
unsigned long long totalRead = 0;
|
||||||
while (totalRead < curPayloadLen) {
|
while (totalRead < curPayloadLen) {
|
||||||
int bytesRead = SSL_read(
|
int bytesRead = SSL_read(
|
||||||
ssl, *out_buffer + (payloadLen - curPayloadLen) + totalRead,
|
ssl, *out_buffer + (payloadLen - curPayloadLen) + totalRead,
|
||||||
curPayloadLen - totalRead);
|
curPayloadLen - totalRead);
|
||||||
if (bytesRead <= 0) {
|
if (bytesRead <= 0) {
|
||||||
free(*out_buffer);
|
free(*out_buffer);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user