aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgre-42 <63736956+gre-42@users.noreply.github.com>2021-06-20 16:09:59 +0200
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2021-06-21 14:47:16 +0300
commit441dbcfe52171c550b696eb45d1d87cb07653823 (patch)
treebae57eec642e44a7abaa30ad619fe69932d2f7ad
parent0b7bac9786c7a5d05fdbc1492634195b46cd59d9 (diff)
downloadlibmicrohttpd-441dbcfe52171c550b696eb45d1d87cb07653823.tar.gz
libmicrohttpd-441dbcfe52171c550b696eb45d1d87cb07653823.zip
websocket example: Use uint32_t instead of ulong for websocket mask
-rw-r--r--src/microhttpd_ws/mhd_websocket.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/microhttpd_ws/mhd_websocket.c b/src/microhttpd_ws/mhd_websocket.c
index 12b46eef..ea1a5bda 100644
--- a/src/microhttpd_ws/mhd_websocket.c
+++ b/src/microhttpd_ws/mhd_websocket.c
@@ -133,7 +133,7 @@ static void
133MHD_websocket_copy_payload (char*dst, 133MHD_websocket_copy_payload (char*dst,
134 const char*src, 134 const char*src,
135 size_t len, 135 size_t len,
136 unsigned long mask, 136 uint32_t mask,
137 unsigned long mask_offset); 137 unsigned long mask_offset);
138 138
139static int 139static int
@@ -175,7 +175,7 @@ MHD_websocket_encode_ping_pong (struct MHD_WebSocketStream*ws,
175 size_t*frame_len, 175 size_t*frame_len,
176 char opcode); 176 char opcode);
177 177
178static unsigned long 178static uint32_t
179MHD_websocket_generate_mask (); 179MHD_websocket_generate_mask ();
180 180
181/** 181/**
@@ -684,7 +684,7 @@ MHD_websocket_decode (struct MHD_WebSocketStream*ws,
684 else 684 else
685 { 685 {
686 /* without mask */ 686 /* without mask */
687 *((unsigned long *) ws->mask_key) = 0; 687 *((uint32_t *) ws->mask_key) = 0;
688 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted; 688 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted;
689 } 689 }
690 } 690 }
@@ -761,7 +761,7 @@ MHD_websocket_decode (struct MHD_WebSocketStream*ws,
761 else 761 else
762 { 762 {
763 /* without mask */ 763 /* without mask */
764 *((unsigned long *) ws->mask_key) = 0; 764 *((uint32_t *) ws->mask_key) = 0;
765 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted; 765 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted;
766 } 766 }
767 } 767 }
@@ -838,7 +838,7 @@ MHD_websocket_decode (struct MHD_WebSocketStream*ws,
838 else 838 else
839 { 839 {
840 /* without mask */ 840 /* without mask */
841 *((unsigned long *) ws->mask_key) = 0; 841 *((uint32_t *) ws->mask_key) = 0;
842 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted; 842 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted;
843 } 843 }
844 } 844 }
@@ -847,10 +847,9 @@ MHD_websocket_decode (struct MHD_WebSocketStream*ws,
847 /* mask finished */ 847 /* mask finished */
848 case MHD_WebSocket_DecodeStep_Mask4Of4: 848 case MHD_WebSocket_DecodeStep_Mask4Of4:
849 ws->frame_header [ws->frame_header_size++] = streambuf [current++]; 849 ws->frame_header [ws->frame_header_size++] = streambuf [current++];
850 *((unsigned long *) ws->mask_key) = *((unsigned 850 *((uint32_t *) ws->mask_key) = *((uint32_t *) &ws->frame_header [ws->
851 long *) &ws->frame_header [ws-> 851 frame_header_size
852 frame_header_size 852 - 4]);
853 - 4]);
854 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted; 853 ws->decode_step = MHD_WebSocket_DecodeStep_HeaderCompleted;
855 break; 854 break;
856 855
@@ -889,7 +888,7 @@ MHD_websocket_decode (struct MHD_WebSocketStream*ws,
889 MHD_websocket_copy_payload (decode_payload + ws->payload_index, 888 MHD_websocket_copy_payload (decode_payload + ws->payload_index,
890 &streambuf [current], 889 &streambuf [current],
891 bytes_to_take, 890 bytes_to_take,
892 *((unsigned long *) ws->mask_key), 891 *((uint32_t *) ws->mask_key),
893 (unsigned long) (ws->payload_index 892 (unsigned long) (ws->payload_index
894 & 0x03)); 893 & 0x03));
895 current += bytes_to_take; 894 current += bytes_to_take;
@@ -1434,7 +1433,7 @@ MHD_websocket_encode_data (struct MHD_WebSocketStream*ws,
1434 char is_masked = MHD_websocket_encode_is_masked (ws); 1433 char is_masked = MHD_websocket_encode_is_masked (ws);
1435 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len); 1434 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len);
1436 size_t total_len = overhead_len + payload_len; 1435 size_t total_len = overhead_len + payload_len;
1437 unsigned long mask = 0 != is_masked ? MHD_websocket_generate_mask () : 0; 1436 uint32_t mask = 0 != is_masked ? MHD_websocket_generate_mask () : 0;
1438 1437
1439 /* allocate memory */ 1438 /* allocate memory */
1440 char*result = ws->malloc (total_len + 1); 1439 char*result = ws->malloc (total_len + 1);
@@ -1577,7 +1576,7 @@ MHD_websocket_encode_ping_pong (struct MHD_WebSocketStream*ws,
1577 char is_masked = MHD_websocket_encode_is_masked (ws); 1576 char is_masked = MHD_websocket_encode_is_masked (ws);
1578 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len); 1577 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len);
1579 size_t total_len = overhead_len + payload_len; 1578 size_t total_len = overhead_len + payload_len;
1580 unsigned long mask = is_masked != 0 ? MHD_websocket_generate_mask () : 0; 1579 uint32_t mask = is_masked != 0 ? MHD_websocket_generate_mask () : 0;
1581 1580
1582 /* allocate memory */ 1581 /* allocate memory */
1583 char*result = ws->malloc (total_len + 1); 1582 char*result = ws->malloc (total_len + 1);
@@ -1669,7 +1668,7 @@ MHD_websocket_encode_close (struct MHD_WebSocketStream*ws,
1669 2 + reason_utf8_len : 0); 1668 2 + reason_utf8_len : 0);
1670 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len); 1669 size_t overhead_len = MHD_websocket_encode_overhead_size (ws, payload_len);
1671 size_t total_len = overhead_len + payload_len; 1670 size_t total_len = overhead_len + payload_len;
1672 unsigned long mask = is_masked != 0 ? MHD_websocket_generate_mask () : 0; 1671 uint32_t mask = is_masked != 0 ? MHD_websocket_generate_mask () : 0;
1673 1672
1674 /* allocate memory */ 1673 /* allocate memory */
1675 char*result = ws->malloc (total_len + 1); 1674 char*result = ws->malloc (total_len + 1);
@@ -1754,7 +1753,7 @@ static void
1754MHD_websocket_copy_payload (char*dst, 1753MHD_websocket_copy_payload (char*dst,
1755 const char*src, 1754 const char*src,
1756 size_t len, 1755 size_t len,
1757 unsigned long mask, 1756 uint32_t mask,
1758 unsigned long mask_offset) 1757 unsigned long mask_offset)
1759{ 1758{
1760 if (0 != len) 1759 if (0 != len)
@@ -1768,7 +1767,7 @@ MHD_websocket_copy_payload (char*dst,
1768 { 1767 {
1769 /* mask is used */ 1768 /* mask is used */
1770 char mask_[4]; 1769 char mask_[4];
1771 *((unsigned long *) mask_) = mask; 1770 *((uint32_t *) mask_) = mask;
1772 for (size_t i = 0; i < len; ++i) 1771 for (size_t i = 0; i < len; ++i)
1773 { 1772 {
1774 dst[i] = src[i] ^ mask_[(i + mask_offset) & 3]; 1773 dst[i] = src[i] ^ mask_[(i + mask_offset) & 3];
@@ -2008,7 +2007,7 @@ MHD_websocket_srand (unsigned long seed)
2008 * Generates a mask for masking by calling 2007 * Generates a mask for masking by calling
2009 * a random number generator. 2008 * a random number generator.
2010 */ 2009 */
2011static unsigned long 2010static uint32_t
2012MHD_websocket_generate_mask () 2011MHD_websocket_generate_mask ()
2013{ 2012{
2014 unsigned char mask_[4]; 2013 unsigned char mask_[4];
@@ -2017,7 +2016,7 @@ MHD_websocket_generate_mask ()
2017 mask_ [2] = (unsigned char) (rand () & 0xFF); 2016 mask_ [2] = (unsigned char) (rand () & 0xFF);
2018 mask_ [3] = (unsigned char) (rand () & 0xFF); 2017 mask_ [3] = (unsigned char) (rand () & 0xFF);
2019 2018
2020 return *((unsigned long *) mask_); 2019 return *((uint32_t *) mask_);
2021} 2020}
2022 2021
2023 2022