libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 1fd9b3779f58e2f3385f9fdd5df8761fb991508e
parent 0db39f453a224571a4a8187e018226e877875393
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun,  7 Sep 2025 01:09:18 +0200

fix #10333

Diffstat:
Mdoc/examples/simplepost.c | 128++++++++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 68 insertions(+), 60 deletions(-)

diff --git a/doc/examples/simplepost.c b/doc/examples/simplepost.c @@ -23,12 +23,9 @@ #define MAXNAMESIZE 20 #define MAXANSWERSIZE 512 -#define GET 0 -#define POST 1 - struct connection_info_struct { - int connectiontype; + enum { GET, POST } connectiontype; char *answerstring; struct MHD_PostProcessor *postprocessor; }; @@ -42,94 +39,107 @@ static const char *askpage = "</body></html>"; #define GREETINGPAGE \ - "<html><body><h1>Welcome, %s!</center></h1></body></html>" + "<html><body><h1>Welcome, %s!</center></h1></body></html>" static const char *errorpage = "<html><body>This doesn't seem to be right.</body></html>"; static enum MHD_Result -send_page (struct MHD_Connection *connection, const char *page) +send_page (struct MHD_Connection *connection, + const char *page) { enum MHD_Result ret; struct MHD_Response *response; - - response = MHD_create_response_from_buffer_static (strlen (page), page); + response = MHD_create_response_from_buffer_static (strlen (page), + page); if (! response) return MHD_NO; - - ret = MHD_queue_response (connection, MHD_HTTP_OK, response); + ret = MHD_queue_response (connection, + MHD_HTTP_OK, + response); MHD_destroy_response (response); - return ret; } static enum MHD_Result -iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key, - const char *filename, const char *content_type, - const char *transfer_encoding, const char *data, uint64_t off, +iterate_post (void *coninfo_cls, + enum MHD_ValueKind kind, + const char *key, + const char *filename, + const char *content_type, + const char *transfer_encoding, + const char *data, + uint64_t off, size_t size) { struct connection_info_struct *con_info = coninfo_cls; + (void) kind; /* Unused. Silent compiler warning. */ (void) filename; /* Unused. Silent compiler warning. */ (void) content_type; /* Unused. Silent compiler warning. */ (void) transfer_encoding; /* Unused. Silent compiler warning. */ (void) off; /* Unused. Silent compiler warning. */ - - if (0 == strcmp (key, "name")) + if (0 != strcmp (key, + "name")) + return MHD_YES; + if ( (size > 0) && + (size <= MAXNAMESIZE) ) { - if ((size > 0) && (size <= MAXNAMESIZE)) - { - char *answerstring; - answerstring = malloc (MAXANSWERSIZE); - if (! answerstring) - return MHD_NO; + char *answerstring; - snprintf (answerstring, MAXANSWERSIZE, GREETINGPAGE, data); - con_info->answerstring = answerstring; - } - else - con_info->answerstring = NULL; - - return MHD_NO; + answerstring = malloc (MAXANSWERSIZE); + if (! answerstring) + return MHD_NO; + snprintf (answerstring, + MAXANSWERSIZE, + GREETINGPAGE, + data); + con_info->answerstring = answerstring; + } + else + { + con_info->answerstring = NULL; } - return MHD_YES; } static void -request_completed (void *cls, struct MHD_Connection *connection, - void **req_cls, enum MHD_RequestTerminationCode toe) +request_completed (void *cls, + struct MHD_Connection *connection, + void **req_cls, + enum MHD_RequestTerminationCode toe) { struct connection_info_struct *con_info = *req_cls; + (void) cls; /* Unused. Silent compiler warning. */ (void) connection; /* Unused. Silent compiler warning. */ (void) toe; /* Unused. Silent compiler warning. */ - if (NULL == con_info) return; - - if (con_info->connectiontype == POST) + if (POST == con_info->connectiontype) { MHD_destroy_post_processor (con_info->postprocessor); if (con_info->answerstring) free (con_info->answerstring); } - free (con_info); *req_cls = NULL; } static enum MHD_Result -answer_to_connection (void *cls, struct MHD_Connection *connection, - const char *url, const char *method, - const char *version, const char *upload_data, - size_t *upload_data_size, void **req_cls) +answer_to_connection (void *cls, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *version, + const char *upload_data, + size_t *upload_data_size, + void **req_cls) { (void) cls; /* Unused. Silent compiler warning. */ (void) url; /* Unused. Silent compiler warning. */ @@ -147,35 +157,35 @@ answer_to_connection (void *cls, struct MHD_Connection *connection, if (0 == strcmp (method, "POST")) { con_info->postprocessor = - MHD_create_post_processor (connection, POSTBUFFERSIZE, - iterate_post, (void *) con_info); - + MHD_create_post_processor (connection, + POSTBUFFERSIZE, + iterate_post, + (void *) con_info); if (NULL == con_info->postprocessor) { free (con_info); return MHD_NO; } - con_info->connectiontype = POST; } else + { con_info->connectiontype = GET; - + } *req_cls = (void *) con_info; return MHD_YES; } - - if (0 == strcmp (method, "GET")) + if (GET == con_info->connectiontype) { - return send_page (connection, askpage); + return send_page (connection, + askpage); } - - if (0 == strcmp (method, "POST")) + if (POST == con_info->connectiontype) { struct connection_info_struct *con_info = *req_cls; - if (*upload_data_size != 0) + if (0 != *upload_data_size) { if (MHD_YES != MHD_post_process (con_info->postprocessor, @@ -183,14 +193,14 @@ answer_to_connection (void *cls, struct MHD_Connection *connection, *upload_data_size)) return MHD_NO; *upload_data_size = 0; - return MHD_YES; } else if (NULL != con_info->answerstring) - return send_page (connection, con_info->answerstring); + return send_page (connection, + con_info->answerstring); } - - return send_page (connection, errorpage); + return send_page (connection, + errorpage); } @@ -202,14 +212,12 @@ main (void) daemon = MHD_start_daemon (MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD, PORT, NULL, NULL, &answer_to_connection, NULL, - MHD_OPTION_NOTIFY_COMPLETED, request_completed, - NULL, MHD_OPTION_END); + MHD_OPTION_NOTIFY_COMPLETED, + &request_completed, NULL, + MHD_OPTION_END); if (NULL == daemon) return 1; - (void) getchar (); - MHD_stop_daemon (daemon); - return 0; }