Rename HTTP_ResponseHandle to HTTP_ResponseBuilder
This commit is contained in:
@@ -30,10 +30,10 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
|
||||
// Block until a request is available
|
||||
int ret = http_server_wait(server, &req, &res);
|
||||
int ret = http_server_wait(server, &req, &builder);
|
||||
|
||||
// The wait functions returns 0 on success and -1
|
||||
// on error. By "error" I mean an unrecoverable
|
||||
@@ -70,19 +70,19 @@ int main(void)
|
||||
// order.
|
||||
|
||||
// First the status code
|
||||
http_response_status(res, 200);
|
||||
http_response_builder_status(builder, 200);
|
||||
|
||||
// Then zero or more headers
|
||||
http_response_header(res, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_builder_header(builder, HTTP_STR("Content-Type: text/plain"));
|
||||
|
||||
// Then you can write zero or more chunks of the response body
|
||||
http_response_body(res, HTTP_STR("Hello"));
|
||||
http_response_body(res, HTTP_STR(", world!"));
|
||||
http_response_builder_body(builder, HTTP_STR("Hello"));
|
||||
http_response_builder_body(builder, HTTP_STR(", world!"));
|
||||
|
||||
// Then, mark the request as complete (Very important or the server will hang!)
|
||||
http_response_done(res);
|
||||
http_response_builder_done(builder);
|
||||
|
||||
// Note that none of the http_response_* functions return errors.
|
||||
// Note that none of the http_response_builder_* functions return errors.
|
||||
// This is by design to simplify user endpoint code. If at any point
|
||||
// something goes wrong, the server will send a code 4xx or 5xx to
|
||||
// the client or abort the TCP connection entirely.
|
||||
|
||||
@@ -9,7 +9,7 @@ int main(void)
|
||||
http_global_init();
|
||||
|
||||
// All the setup is identical to the previous example.
|
||||
// The only thing that changes where "http_response_body"
|
||||
// The only thing that changes where "http_response_builder_body"
|
||||
// is called.
|
||||
|
||||
HTTP_Server *server = http_server_init(HTTP_STR("127.0.0.1"), 8080);
|
||||
@@ -19,19 +19,19 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
|
||||
int ret = http_server_wait(server, &req, &res);
|
||||
int ret = http_server_wait(server, &req, &builder);
|
||||
if (ret < 0) return -1;
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_header(res, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_header(builder, HTTP_STR("Content-Type: text/plain"));
|
||||
|
||||
// The previous example used the *_body function to
|
||||
// write the response body in chunks:
|
||||
//
|
||||
// http_response_body(res, HTTP_STR("Hello"));
|
||||
// http_response_body(res, HTTP_STR(", world!"));
|
||||
// http_response_builder_body(builder, HTTP_STR("Hello"));
|
||||
// http_response_builder_body(builder, HTTP_STR(", world!"));
|
||||
//
|
||||
// This function reads from an user buffer and copies
|
||||
// the data in the connection's output buffer. If the
|
||||
@@ -53,7 +53,7 @@ int main(void)
|
||||
int example_data_len = sizeof(example_data)-1;
|
||||
|
||||
// Tell the server how much data we are going to write
|
||||
http_response_bodycap(res, example_data_len);
|
||||
http_response_builder_bodycap(builder, example_data_len);
|
||||
|
||||
int cap;
|
||||
char *dst;
|
||||
@@ -62,7 +62,7 @@ int main(void)
|
||||
// output parameter [cap] is the capacity of the region
|
||||
// and is equal or larger than the data we requested
|
||||
// with *_bodycap
|
||||
dst = http_response_bodybuf(res, &cap);
|
||||
dst = http_response_builder_bodybuf(builder, &cap);
|
||||
|
||||
// Write the data directly into the output buffer. In
|
||||
// this example we are copying from memory, but you could
|
||||
@@ -73,7 +73,7 @@ int main(void)
|
||||
|
||||
// Tell the server how much bytes we have written to
|
||||
// the provided region.
|
||||
http_response_bodyack(res, example_data_len);
|
||||
http_response_builder_bodyack(builder, example_data_len);
|
||||
|
||||
// The reason we had to guard the [memcpy] by checking the
|
||||
// [dst] pointer is that if an error occurred internally
|
||||
@@ -84,7 +84,7 @@ int main(void)
|
||||
// as nothing bad happened.
|
||||
|
||||
// As usual, mark the response as complete
|
||||
http_response_done(res);
|
||||
http_response_builder_done(builder);
|
||||
|
||||
// If we're being being honest, this is not a zero-copy
|
||||
// interface. It's more like an N-1 copy interface as in
|
||||
|
||||
@@ -15,15 +15,15 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
|
||||
int ret = http_server_wait(server, &req, &res);
|
||||
int ret = http_server_wait(server, &req, &builder);
|
||||
if (ret < 0) return -1;
|
||||
|
||||
// Say we are building a request..
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_header(res, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_header(builder, HTTP_STR("Content-Type: text/plain"));
|
||||
|
||||
// .. and in the middle of building an error condition
|
||||
// occurs. Maybe a file was missing or an allocation fails.
|
||||
@@ -37,19 +37,19 @@ int main(void)
|
||||
bool error_occurred = true;
|
||||
if (error_occurred) {
|
||||
|
||||
http_response_undo(res);
|
||||
http_response_builder_undo(builder);
|
||||
|
||||
// Now we are back to setting the status code
|
||||
http_response_status(res, 500);
|
||||
http_response_header(res, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_body(res, HTTP_STR("An error occurred!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 500);
|
||||
http_response_builder_header(builder, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_builder_body(builder, HTTP_STR("An error occurred!"));
|
||||
http_response_builder_done(builder);
|
||||
|
||||
} else {
|
||||
|
||||
// If no error occures, we finish as planned
|
||||
http_response_body(res, HTTP_STR("Hello, world!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_body(builder, HTTP_STR("Hello, world!"));
|
||||
http_response_builder_done(builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ typedef enum {
|
||||
|
||||
typedef struct {
|
||||
JobType type;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
} Job;
|
||||
|
||||
// Maximum number of jobs that can be buffered at once
|
||||
@@ -100,15 +100,15 @@ ThreadReturn worker(void*)
|
||||
break;
|
||||
|
||||
case JOB_A:
|
||||
http_response_status(job.res, 200);
|
||||
http_response_body(job.res, HTTP_STR("Job A completed"));
|
||||
http_response_done(job.res);
|
||||
http_response_builder_status(job.builder, 200);
|
||||
http_response_builder_body(job.builder, HTTP_STR("Job A completed"));
|
||||
http_response_builder_done(job.builder);
|
||||
break;
|
||||
|
||||
case JOB_B:
|
||||
http_response_status(job.res, 200);
|
||||
http_response_body(job.res, HTTP_STR("Job B completed"));
|
||||
http_response_done(job.res);
|
||||
http_response_builder_status(job.builder, 200);
|
||||
http_response_builder_body(job.builder, HTTP_STR("Job B completed"));
|
||||
http_response_builder_done(job.builder);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -131,9 +131,9 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
|
||||
int ret = http_server_wait(server, &req, &res);
|
||||
int ret = http_server_wait(server, &req, &builder);
|
||||
if (ret < 0) return -1;
|
||||
|
||||
if (http_streq(req->url.path, HTTP_STR("/endpoint_A"))) {
|
||||
@@ -143,7 +143,7 @@ int main(void)
|
||||
|
||||
Job job;
|
||||
job.type = JOB_A;
|
||||
job.res = res;
|
||||
job.builder = builder;
|
||||
push_job(job, true);
|
||||
|
||||
} else if (http_streq(req->url.path, HTTP_STR("/endpoint_B"))) {
|
||||
@@ -155,18 +155,18 @@ int main(void)
|
||||
|
||||
Job job;
|
||||
job.type = JOB_B;
|
||||
job.res = res;
|
||||
job.builder = builder;
|
||||
if (!push_job(job, false)) {
|
||||
http_response_status(res, 503);
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 503);
|
||||
http_response_builder_done(builder);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// Other endpoints may resolve immediately
|
||||
|
||||
http_response_status(res, 404);
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 404);
|
||||
http_response_builder_done(builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,16 +60,16 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
HTTP_ResponseBuilder builder;
|
||||
|
||||
int ret = http_server_wait(server, &req, &res);
|
||||
int ret = http_server_wait(server, &req, &builder);
|
||||
if (ret < 0) return -1;
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_header(res, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_body(res, HTTP_STR("Hello"));
|
||||
http_response_body(res, HTTP_STR(", world!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_header(builder, HTTP_STR("Content-Type: text/plain"));
|
||||
http_response_builder_body(builder, HTTP_STR("Hello"));
|
||||
http_response_builder_body(builder, HTTP_STR(", world!"));
|
||||
http_response_builder_done(builder);
|
||||
}
|
||||
|
||||
http_server_free(server);
|
||||
|
||||
@@ -87,8 +87,8 @@ int main(void)
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
ret = http_server_wait(server, &req, &res);
|
||||
HTTP_ResponseBuilder builder;
|
||||
ret = http_server_wait(server, &req, &builder);
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
@@ -98,24 +98,24 @@ int main(void)
|
||||
|
||||
if (http_streq(host, HTTP_STR("websiteB.com"))) {
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_body(res, HTTP_STR("Hello from websiteB.com!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_body(builder, HTTP_STR("Hello from websiteB.com!"));
|
||||
http_response_builder_done(builder);
|
||||
|
||||
} else if (http_streq(host, HTTP_STR("websiteC.com"))) {
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_body(res, HTTP_STR("Hello from websiteC.com!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_body(builder, HTTP_STR("Hello from websiteC.com!"));
|
||||
http_response_builder_done(builder);
|
||||
|
||||
} else {
|
||||
|
||||
// Serve websiteA.com by default to be consistent
|
||||
// with the certificate setup
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_body(res, HTTP_STR("Hello from websiteA.com!"));
|
||||
http_response_done(res);
|
||||
http_response_builder_status(builder, 200);
|
||||
http_response_builder_body(builder, HTTP_STR("Hello from websiteA.com!"));
|
||||
http_response_builder_done(builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user