Christian Grothoff 5 ماه پیش
والد
کامیت
1fd9b3779f
1فایلهای تغییر یافته به همراه68 افزوده شده و 60 حذف شده
  1. 68 60
      doc/examples/simplepost.c

+ 68 - 60
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;
 }