mirror of
https://github.com/lxsang/ant-http
synced 2024-11-16 00:28:21 +01:00
ws header read: return null if data is not available
All checks were successful
gitea-sync/ant-http/pipeline/head This commit looks good
All checks were successful
gitea-sync/ant-http/pipeline/head This commit looks good
This commit is contained in:
parent
bf9cd3f1ca
commit
cd40ec7214
12
lib/ws.c
12
lib/ws.c
@ -36,7 +36,7 @@ ws_msg_header_t *ws_read_header(void *client)
|
|||||||
ws_msg_header_t *header = (ws_msg_header_t *)malloc(sizeof(*header));
|
ws_msg_header_t *header = (ws_msg_header_t *)malloc(sizeof(*header));
|
||||||
|
|
||||||
// get first byte
|
// get first byte
|
||||||
if (antd_recv(client, &byte, sizeof(byte)) < 0)
|
if (antd_recv(client, &byte, sizeof(byte)) <= 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (BITV(byte, 6) || BITV(byte, 5) || BITV(byte, 4))
|
if (BITV(byte, 6) || BITV(byte, 5) || BITV(byte, 4))
|
||||||
goto fail; // all RSV bit must be 0
|
goto fail; // all RSV bit must be 0
|
||||||
@ -47,7 +47,7 @@ ws_msg_header_t *ws_read_header(void *client)
|
|||||||
header->opcode = (byte & 0x0F);
|
header->opcode = (byte & 0x0F);
|
||||||
|
|
||||||
// get next byte
|
// get next byte
|
||||||
if (antd_recv(client, &byte, sizeof(byte)) < 0)
|
if (antd_recv(client, &byte, sizeof(byte)) <= 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
//printf("MASK: %d paylen:%d\n", BITV(byte,7), (byte & 0x7F));
|
//printf("MASK: %d paylen:%d\n", BITV(byte,7), (byte & 0x7F));
|
||||||
@ -67,21 +67,21 @@ ws_msg_header_t *ws_read_header(void *client)
|
|||||||
}
|
}
|
||||||
else if (len == 126)
|
else if (len == 126)
|
||||||
{
|
{
|
||||||
if (antd_recv(client, bytes, 2 * sizeof(uint8_t)) < 0)
|
if (antd_recv(client, bytes, 2 * sizeof(uint8_t)) <= 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
header->plen = (bytes[0] << 8) + bytes[1];
|
header->plen = (bytes[0] << 8) + bytes[1];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//read only last 4 byte
|
//read only last 4 byte
|
||||||
if (antd_recv(client, bytes, 8 * sizeof(uint8_t)) < 0)
|
if (antd_recv(client, bytes, 8 * sizeof(uint8_t)) <= 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
header->plen = (bytes[4] << 24) + (bytes[5] << 16) + (bytes[6] << 8) + bytes[7];
|
header->plen = (bytes[4] << 24) + (bytes[5] << 16) + (bytes[6] << 8) + bytes[7];
|
||||||
}
|
}
|
||||||
//printf("len: %d\n", header->plen);
|
//printf("len: %d\n", header->plen);
|
||||||
// last step is to get the maskey
|
// last step is to get the maskey
|
||||||
if (header->mask)
|
if (header->mask)
|
||||||
if (antd_recv(client, header->mask_key, 4 * sizeof(uint8_t)) < 0)
|
if (antd_recv(client, header->mask_key, 4 * sizeof(uint8_t)) <= 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
//printf("key 0: %d key 1: %d key2:%d, key3: %d\n",header->mask_key[0],header->mask_key[1],header->mask_key[2], header->mask_key[3] );
|
//printf("key 0: %d key 1: %d key2:%d, key3: %d\n",header->mask_key[0],header->mask_key[1],header->mask_key[2], header->mask_key[3] );
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ int ws_read_data(void *client, ws_msg_header_t *header, int len, uint8_t *data)
|
|||||||
if (header->plen == 0)
|
if (header->plen == 0)
|
||||||
return 0;
|
return 0;
|
||||||
int dlen = (len == -1 || len > (int)header->plen) ? (int)header->plen : len;
|
int dlen = (len == -1 || len > (int)header->plen) ? (int)header->plen : len;
|
||||||
if ((dlen = antd_recv(client, data, dlen)) < 0)
|
if ((dlen = antd_recv(client, data, dlen)) <= 0)
|
||||||
return -1;
|
return -1;
|
||||||
header->plen = header->plen - dlen;
|
header->plen = header->plen - dlen;
|
||||||
// unmask received data
|
// unmask received data
|
||||||
|
Loading…
Reference in New Issue
Block a user