11WebSocket frame parser
22======================
33
4-
54### Features
65* No dependencies
76* No internal buffering
87* No need to buffer the whole frame — works with chunks of a data
8+ * No syscalls
9+ * No allocations
10+ * It can be interrupted at anytime
911
10- This is a parser for WebSocket frame-messages written in C (by [ RFC6455] ( https://tools.ietf.org/html/rfc6455 ) ).
11- It does not make any syscalls nor allocations, it does not
12- buffer data, it can be interrupted at anytime.
12+ This is a parser for WebSocket frame-messages written in C (see [ RFC6455] ( https://tools.ietf.org/html/rfc6455 ) ).
1313
1414Tested as part of [ PHP-ION] ( https://github.com/php-ion/php-ion ) extension.
1515
@@ -65,9 +65,9 @@ int websocket_frame_header(websocket_parser * parser) {
6565int ion_websocket_frame_body(websocket_parser * parser, const char * at, size_t size) {
6666 if(parser->flags & WS_HAS_MASK) {
6767 // if frame has mask, we have to copy and decode data via websocket_parser_copy_masked function
68- websocket_parser_copy_masked (&parser->data->body[ parser->offset] , at, size , parser);
68+ websocket_parser_decode (&parser->data->body[ parser->offset] , at, length , parser);
6969 } else {
70- memcpy(&parser->data->body[ parser->offset] , at, size );
70+ memcpy(&parser->data->body[ parser->offset] , at, length );
7171 }
7272 return 0;
7373}
@@ -81,11 +81,13 @@ When data is received execute the parser and check for errors.
8181
8282```c
8383size_t nread;
84+ // .. init settitngs and parser ...
8485
8586nread = websocket_parser_execute(parser, &settings, data, data_len);
86- if(parser->error || nread != data_len) {
87- // e.g. log error
87+ if(nread != data_len) {
88+ // some callback return a value other than 0
8889}
90+
8991// ...
9092free(parser);
9193```
0 commit comments