Browse Source

Alternative to mg_upload (Step 7/?)

bel 9 năm trước cách đây
mục cha
commit
b08b61d0d2
3 tập tin đã thay đổi với 19 bổ sung7 xóa
  1. 9 3
      examples/embedded_c/embedded_c.c
  2. 9 3
      src/handle_form.inl
  3. 1 1
      test/form.html

+ 9 - 3
examples/embedded_c/embedded_c.c

@@ -156,7 +156,12 @@ FileHandler(struct mg_connection *conn, void *cbdata)
 
 
 struct mg_form_data_handler {
-	int (*field_found)(const char *key, const char *value);
+	int (*field_found)(const char *key, const char *value, void *user_data);
+	int (*file_found)(const char *key,
+	                  const char *filename,
+	                  int *disposition,
+	                  void *user_data);
+	void *user_data;
 };
 
 
@@ -166,12 +171,13 @@ FormHandler(struct mg_connection *conn, void *cbdata)
 	/* Handler may access the request info using mg_get_request_info */
 	const struct mg_request_info *req_info = mg_get_request_info(conn);
 	int ret;
-	struct mg_form_data_handler fdh = {0};
+	struct mg_form_data_handler fdh = {0, 0, 0};
 
 	/* TODO: Checks before calling handle_form_data ? */
 	(void)req_info;
 
-	ret = handle_form_data(conn, &fdh);
+	/* TODO: Handle the return value */
+	ret = mg_handle_form_data(conn, &fdh);
 
 	return 1;
 }

+ 9 - 3
src/handle_form.inl

@@ -39,18 +39,24 @@ mirror_body___dev_helper(struct mg_connection *conn)
 
 
 struct mg_form_data_handler {
-	int (*field_found)(const char *key, const char *value);
+	int (*field_found)(const char *key, const char *value, void *user_data);
+	int (*file_found)(const char *key,
+	                  const char *filename,
+	                  int *disposition,
+	                  void *user_data);
+	void *user_data;
 };
 
 
 int
-handle_form_data(struct mg_connection *conn, struct mg_form_data_handler *fdh)
+mg_handle_form_data(struct mg_connection *conn,
+                    struct mg_form_data_handler *fdh)
 {
 	const char *content_type;
 	const char *boundary;
+	const char *data;
 	int has_body_data =
 	    (conn->request_info.content_length > 0) || (conn->is_chunked);
-	char *data;
 
 	/* There are three ways to encode data from a HTML form:
 	 * 1) method: GET (default)

+ 1 - 1
test/form.html

@@ -102,7 +102,7 @@
 
       <fieldset>
         <legend>Submit to callback:</legend>
-        This will only work in the embedded_c example.
+        This will work in the embedded_c example. It will call mg_handle_form_data to parse the request.
         <br>
         <input type="submit" value="Submit (form default)">
         <input type="submit" value="Submit (GET)"                 formmethod="GET">