@@ -59,14 +59,14 @@ size_t websocket_parser_execute(websocket_parser *parser, const websocket_parser
5959 size_t r = 0 ;
6060 char c ;
6161
62- while (i < len ) {
62+ while (EXPECTED ( i < len ) ) {
6363 c = data [i ];
6464 switch (parser -> state ) {
6565 case s_start :
6666 parser -> length = 0 ;
6767 parser -> flags = (uint32_t ) (c & WS_OP_MASK );
6868 c >>= 7 ;
69- if (c & 1 ) {
69+ if (EXPECTED ( c & 1 ) ) {
7070 parser -> flags |= WS_FIN ;
7171 }
7272 parser -> state = s_head ;
@@ -101,7 +101,7 @@ size_t websocket_parser_execute(websocket_parser *parser, const websocket_parser
101101 if (EXPECTED (parser -> flags & WS_HAS_MASK )) {
102102 parser -> state = s_mask ;
103103 parser -> require = 4 ;
104- } else if (parser -> length ) {
104+ } else if (EXPECTED ( parser -> length ) ) {
105105 parser -> require = parser -> length ;
106106 NOTIFY_CB (frame_header );
107107 parser -> state = s_body ;
@@ -141,7 +141,7 @@ size_t websocket_parser_execute(websocket_parser *parser, const websocket_parser
141141 }
142142 break ;
143143 case s_body :
144- if (parser -> require ) {
144+ if (EXPECTED ( parser -> require ) ) {
145145 r = parser -> require ;
146146 parser -> require -= len - i ;
147147 EMIT_DATA_CB (frame_body , & data [i ], len - i );
@@ -163,11 +163,20 @@ size_t websocket_parser_execute(websocket_parser *parser, const websocket_parser
163163 return i ;
164164}
165165
166- void websocket_parser_copy_masked (char * dst , const char * src , size_t len , websocket_parser * parser ) {
166+ void websocket_parser_decode (char * dst , const char * src , size_t len , websocket_parser * parser ) {
167167 size_t i = 0 ;
168168 for (; i < len ; i ++ ) {
169169 dst [i ] = src [i ] ^ parser -> mask [(i + parser -> mask_offset ) % 4 ];
170170 }
171171
172172 parser -> mask_offset = (uint8_t ) ((i + parser -> mask_offset + 1 ) % 4 );
173+ }
174+
175+ uint8_t websocket_decode (char * dst , const char * src , size_t len , char mask [4 ], uint8_t mask_offset ) {
176+ size_t i = 0 ;
177+ for (; i < len ; i ++ ) {
178+ dst [i ] = src [i ] ^ mask [(i + mask_offset ) % 4 ];
179+ }
180+
181+ return (uint8_t ) ((i + mask_offset + 1 ) % 4 );
173182}
0 commit comments