diff --git a/README.md b/README.md index b63418a..0bf5d35 100644 --- a/README.md +++ b/README.md @@ -36,38 +36,41 @@ Usage One `http_parser` object is used per TCP connection. Initialize the struct using `http_parser_init()` and set the callbacks. That might look something like this for a request parser: +```c +http_parser_settings settings; +settings.on_url = my_url_callback; +settings.on_header_field = my_header_field_callback; +/* ... */ - http_parser_settings settings; - settings.on_url = my_url_callback; - settings.on_header_field = my_header_field_callback; - /* ... */ - - http_parser *parser = malloc(sizeof(http_parser)); - http_parser_init(parser, HTTP_REQUEST); - parser->data = my_socket; +http_parser *parser = malloc(sizeof(http_parser)); +http_parser_init(parser, HTTP_REQUEST); +parser->data = my_socket; +``` When data is received on the socket execute the parser and check for errors. - size_t len = 80*1024, nparsed; - char buf[len]; - ssize_t recved; +```c +size_t len = 80*1024, nparsed; +char buf[len]; +ssize_t recved; - recved = recv(fd, buf, len, 0); +recved = recv(fd, buf, len, 0); - if (recved < 0) { - /* Handle error. */ - } +if (recved < 0) { + /* Handle error. */ +} - /* Start up / continue the parser. - * Note we pass recved==0 to signal that EOF has been recieved. - */ - nparsed = http_parser_execute(parser, &settings, buf, recved); +/* Start up / continue the parser. + * Note we pass recved==0 to signal that EOF has been recieved. + */ +nparsed = http_parser_execute(parser, &settings, buf, recved); - if (parser->upgrade) { - /* handle new protocol */ - } else if (nparsed != recved) { - /* Handle error. Usually just close the connection. */ - } +if (parser->upgrade) { + /* handle new protocol */ +} else if (nparsed != recved) { + /* Handle error. Usually just close the connection. */ +} +``` HTTP needs to know where the end of the stream is. For example, sometimes servers send responses without Content-Length and expect the client to