Rewrite
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#include <http.h>
|
||||
|
||||
// This example shows how undo a response that is being built
|
||||
// when an error occurs.
|
||||
|
||||
int main(void)
|
||||
{
|
||||
HTTP_Server *server = http_server_init(HTTP_STR("127.0.0.1"), 8080);
|
||||
if (server == NULL)
|
||||
return -1;
|
||||
|
||||
for (;;) {
|
||||
|
||||
HTTP_Request *req;
|
||||
HTTP_ResponseHandle res;
|
||||
|
||||
int ret = http_server_wait(server, &res, &res);
|
||||
if (ret < 0) return -1;
|
||||
|
||||
// Say we are building a request..
|
||||
|
||||
http_response_status(res, 200);
|
||||
http_response_header(res, "Content-Type: text/plain");
|
||||
|
||||
// .. and in the middle of building an error condition
|
||||
// occurs. Maybe a file was missing or an allocation fails.
|
||||
// The proper response in this case would be a code 500
|
||||
// with an error message, but we already wrote the first
|
||||
// part of the response assuming the operation would succede.
|
||||
//
|
||||
// You can use the *_undo function to reset the response
|
||||
// building process
|
||||
|
||||
bool error_occurred = true;
|
||||
if (error_occurred) {
|
||||
|
||||
http_response_undo(res);
|
||||
|
||||
// Now we are back to setting the status code
|
||||
http_response_status(res, 500);
|
||||
http_response_header(res, "Content-Type: text/plain");
|
||||
http_response_body(res, HTTP_STR("An error occurred!"));
|
||||
http_response_done(res);
|
||||
|
||||
} else {
|
||||
|
||||
// If no error occures, we finish as planned
|
||||
http_response_body(res, HTTP_STR("Hello, world!"));
|
||||
http_response_done(res);
|
||||
}
|
||||
}
|
||||
|
||||
http_server_free(server);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user