commit d5f1f49d52bc3a5c22a6352309f0dc476d9c43a3
parent b0b2beb907b69bf3d98c7789e3d2113bdf7e2683
Author: finwo <finwo@pm.me>
Date: Sun, 10 Nov 2019 17:47:34 +0100
Let readme reflect the recent changes
Diffstat:
3 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/README.md b/README.md
@@ -12,7 +12,7 @@ static void onRequest(struct http_parser_event *ev) {
// Fetching the request
// Has been wrapped in http_parser_event to support more features in the future
- struct http_parser_request *request = ev->request;
+ struct http_parser_message *request = ev->request;
// Basic http request data
printf("Method: %s\n", request->method);
@@ -20,18 +20,21 @@ static void onRequest(struct http_parser_event *ev) {
// Reading headers are case-insensitive due to non-compliant clients/servers
printf("Host: %s\n", http_parser_header_get(request, "host"));
- // Once you're done with the request, you'll have to free it
- http_parser_request_free(request);
+ // Once you're done with the request, you'll have to free it yourself
+ http_parser_message_free(request);
+
+ // Or you can free the whole pair
+ http_parser_pair_free(ev->pair);
}
-// Initialize a request
-struct http_parser_request *request = http_parser_init();
+// Initialize a request/response pair
+struct http_parser_pair *reqres = http_parser_pair_init();
-// Assign userdata into the request
-// Use it to track whatever you need
-request->udata = (void*)...;
+// Userdata to be included can be assigned
+reqres->udata = (void*)...;
-// Attach a function
+// Trigger function 'onRequest' when the request is ready
+reqres->onRequest = onRequest;
// Stored http message
char *message =
@@ -41,5 +44,5 @@ char *message =
;
// Passing network data into it
-http_parser_request_data(request, message, strlen(message));
+http_parser_pair_request_data(reqseq, message, strlen(message));
```
diff --git a/src/http-parser.c b/src/http-parser.c
@@ -215,16 +215,15 @@ static int http_parser_message_read_header(struct http_parser_message *message)
void http_parser_pair_request_data(struct http_parser_pair *pair, char *data, int size) {
struct http_parser_event *ev;
http_parser_request_data(pair->request, data, size);
- if (pair->request->_state == HTTP_PARSER_STATE_DONE) {
- if (pair->onRequest) {
- ev = calloc(1,sizeof(struct http_parser_event));
- ev->request = pair->request;
- ev->response = pair->response;
- ev->udata = pair->udata;
- pair->onRequest(ev);
- free(ev);
- pair->onRequest = NULL;
- }
+ if (pair->request->ready && pair->onRequest) {
+ ev = calloc(1,sizeof(struct http_parser_event));
+ ev->request = pair->request;
+ ev->response = pair->response;
+ ev->pair = pair;
+ ev->udata = pair->udata;
+ pair->onRequest(ev);
+ free(ev);
+ pair->onRequest = NULL;
}
}
diff --git a/src/http-parser.h b/src/http-parser.h
@@ -21,6 +21,7 @@ struct http_parser_header {
struct http_parser_event {
struct http_parser_message *request;
struct http_parser_message *response;
+ struct http_parser_pair *pair;
void *udata;
};