diff options
author | gre-42 <63736956+gre-42@users.noreply.github.com> | 2021-06-20 16:09:59 +0200 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2021-06-21 14:47:16 +0300 |
commit | 441dbcfe52171c550b696eb45d1d87cb07653823 (patch) | |
tree | bae57eec642e44a7abaa30ad619fe69932d2f7ad | |
parent | 0b7bac9786c7a5d05fdbc1492634195b46cd59d9 (diff) | |
download | libmicrohttpd-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.c | 33 |
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 | |||
133 | MHD_websocket_copy_payload (char*dst, | 133 | MHD_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 | ||
139 | static int | 139 | static 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 | ||
178 | static unsigned long | 178 | static uint32_t |
179 | MHD_websocket_generate_mask (); | 179 | MHD_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 | |||
1754 | MHD_websocket_copy_payload (char*dst, | 1753 | MHD_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 | */ |
2011 | static unsigned long | 2010 | static uint32_t |
2012 | MHD_websocket_generate_mask () | 2011 | MHD_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 | ||