|
@@ -8153,14 +8153,24 @@ mg_websocket_client_write(struct mg_connection *conn,
|
|
|
{
|
|
|
int retval = -1;
|
|
|
size_t i = 0;
|
|
|
- uint32_t masking_key =
|
|
|
- 0x1594DAC0; /* TODO (mid): replace by random generator */
|
|
|
+ static uint64_t lfsr = 0;
|
|
|
+ uint32_t masking_key;
|
|
|
char *masked_data = (char *)mg_malloc(((dataLen + 7) / 4) * 4);
|
|
|
|
|
|
+ if (lfsr == 0) {
|
|
|
+ lfsr = (uint64_t)time(NULL);
|
|
|
+ } else {
|
|
|
+ lfsr = (lfsr >> 1)
|
|
|
+ | ((((lfsr >> 0) ^ (lfsr >> 1) ^ (lfsr >> 3) ^ (lfsr >> 4)) & 1)
|
|
|
+ << 63);
|
|
|
+ }
|
|
|
+ masking_key = (uint32_t)lfsr;
|
|
|
+
|
|
|
if (masked_data == NULL) {
|
|
|
/* Return -1 in an error case */
|
|
|
- mg_cry(conn, "Cannot allocate buffer for masked websocket response: "
|
|
|
- "Out of memory");
|
|
|
+ mg_cry(conn,
|
|
|
+ "Cannot allocate buffer for masked websocket response: "
|
|
|
+ "Out of memory");
|
|
|
return -1;
|
|
|
}
|
|
|
for (i = 0; i < dataLen; i += 4) {
|