Kaynağa Gözat

Alternative to mg_upload (Step 12/?)

bel 9 yıl önce
ebeveyn
işleme
fee3db104b
2 değiştirilmiş dosya ile 13 ekleme ve 2 silme
  1. 10 0
      examples/embedded_c/embedded_c.c
  2. 3 2
      src/handle_form.inl

+ 10 - 0
examples/embedded_c/embedded_c.c

@@ -177,6 +177,13 @@ field_found(const char *key,
             size_t vallen,
             void *user_data)
 {
+	struct mg_connection *conn = (struct mg_connection *)user_data;
+
+	mg_write(conn, key, keylen);
+	mg_printf(conn, " = ");
+	mg_write(conn, value, vallen);
+	mg_printf(conn, "\r\n");
+
 	return 0;
 }
 
@@ -192,6 +199,9 @@ FormHandler(struct mg_connection *conn, void *cbdata)
 	/* TODO: Checks before calling handle_form_data ? */
 	(void)req_info;
 
+	mg_printf(conn, "HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\n\r\n");
+	fdh.user_data = (void *)conn;
+
 	/* TODO: Handle the return value */
 	ret = mg_handle_form_data(conn, &fdh);
 

+ 3 - 2
src/handle_form.inl

@@ -108,6 +108,7 @@ mg_handle_form_data(struct mg_connection *conn,
 				next++;
 			} else {
 				vallen = strlen(val);
+				next = val + vallen;
 			}
 
 			/* Call callback */
@@ -115,7 +116,7 @@ mg_handle_form_data(struct mg_connection *conn,
 			    data, (size_t)keylen, val, (size_t)vallen, fdh->user_data);
 
 			/* Proceed to next entry */
-			data = val + vallen;
+			data = next;
 		}
 
 		return 0;
@@ -135,7 +136,7 @@ mg_handle_form_data(struct mg_connection *conn,
 		int buf_fill = 0;
 
 		for (;;) {
-
+			/* TODO(high): Handle (text) fields with data > sizeof(buf). */
 			const char *val;
 			const char *next;
 			ptrdiff_t keylen, vallen;