Jelajahi Sumber

Updated chunked_example.c

Evgeny Grin (Karlson2k) 8 tahun lalu
induk
melakukan
5d497ac699
2 mengubah file dengan 24 tambahan dan 2 penghapusan
  1. 4 0
      ChangeLog
  2. 20 2
      src/examples/chunked_example.c

+ 4 - 0
ChangeLog

@@ -1,3 +1,7 @@
+Tue Jul 23 11:32:00 MSK 2017
+	Updated chunked_example.c to provide real illustration of usage of
+	chunked encoding. -EG
+
 Thu Jul 13 21:41:00 MSK 2017
 	Restored SIGPIPE suppression in TLS mode.
 	Added new value MHD_FEATURE_AUTOSUPPRESS_SIGPIPE so application could

+ 20 - 2
src/examples/chunked_example.c

@@ -30,9 +30,27 @@ static ssize_t
 callback (void *cls,
           uint64_t pos,
           char *buf,
-          size_t max)
+          size_t buf_size)
 {
-  return MHD_CONTENT_READER_END_OF_STREAM;
+  static const char response_data[] = "<html><head><title>Simple response</title></head>" \
+      "<body>Simple response text</body></html>";
+  static const uint64_t response_size = (sizeof(response_data)/sizeof(char)) - 1;
+  size_t size_to_copy;
+
+  /* Note: 'pos' will never exceed size of transmitted data. */
+  /* You can use 'pos == response_size' in next check. */
+  if (pos >= response_size)
+    { /* Whole response was sent. Signal end of response. */
+      return MHD_CONTENT_READER_END_OF_STREAM;
+    }
+
+  if (buf_size < (response_size - pos) )
+    size_to_copy = buf_size;
+  else
+    size_to_copy = response_size - pos;
+
+  memcpy (buf, response_data + pos, size_to_copy);
+  return size_to_copy;
 }