gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r33399 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r33399 - gnunet/src/transport
Date: Mon, 26 May 2014 18:46:53 +0200

Author: amatus
Date: 2014-05-26 18:46:53 +0200 (Mon, 26 May 2014)
New Revision: 33399

Modified:
   gnunet/src/transport/plugin_transport_http_server.c
Log:
Add CORS support to HTTP transport


Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2014-05-26 16:39:09 UTC 
(rev 33398)
+++ gnunet/src/transport/plugin_transport_http_server.c 2014-05-26 16:46:53 UTC 
(rev 33399)
@@ -22,6 +22,7 @@
  * @file transport/plugin_transport_http_server.c
  * @brief HTTP/S server transport plugin
  * @author Matthias Wachs
+ * @author David Barksdale
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"
@@ -1371,6 +1372,23 @@
   return GNUNET_OK;
 }
 
+/**
+ * Add headers to a request indicating that we allow Cross-Origin Resource
+ * Sharing.
+ */
+static void
+add_cors_headers(struct MHD_Response *response)
+{
+  MHD_add_response_header (response,
+                           "Access-Control-Allow-Origin",
+                           "*");
+  MHD_add_response_header (response,
+                           "Access-Control-Allow-Methods",
+                           "GET, PUT, OPTIONS");
+  MHD_add_response_header (response,
+                           "Access-Control-Max-Age",
+                           "86400");
+}
 
 /**
  * MHD callback for a new incoming connection
@@ -1407,6 +1425,16 @@
   GNUNET_assert (cls != NULL);
   if (sc == NULL)
   {
+    /* CORS pre-flight request */
+    if (0 == strcmp (MHD_HTTP_METHOD_OPTIONS, method))
+    {
+      response = MHD_create_response_from_buffer (0, NULL,
+                                                  MHD_RESPMEM_PERSISTENT);
+      add_cors_headers(response);
+      res = MHD_queue_response (mhd_connection, MHD_HTTP_OK, response);
+      MHD_destroy_response (response);
+      return res;
+    }
     /* new connection */
     sc = server_lookup_connection (plugin, mhd_connection, url, method);
     if (sc != NULL)
@@ -1419,6 +1447,7 @@
       MHD_add_response_header (response,
                               MHD_HTTP_HEADER_CONTENT_TYPE,
                               "text/html");
+      add_cors_headers(response);
       res = MHD_queue_response (mhd_connection, MHD_HTTP_NOT_FOUND, response);
       MHD_destroy_response (response);
       return res;
@@ -1445,6 +1474,7 @@
     response = MHD_create_response_from_data (strlen ("Thank you!"),
                                        "Thank you!",
                                        MHD_NO, MHD_NO);
+    add_cors_headers(response);
     MHD_queue_response (mhd_connection, MHD_HTTP_OK, response);
     MHD_destroy_response (response);
     return MHD_YES;
@@ -1457,6 +1487,7 @@
                                                   32 * 1024,
                                                   &server_send_callback, s,
                                                   NULL);
+    add_cors_headers(response);
     MHD_queue_response (mhd_connection, MHD_HTTP_OK, response);
     MHD_destroy_response (response);
     return MHD_YES;
@@ -1491,6 +1522,7 @@
       response = MHD_create_response_from_data (strlen ("Thank you!"),
                                          "Thank you!",
                                          MHD_NO, MHD_NO);
+      add_cors_headers(response);
       MHD_queue_response (mhd_connection, MHD_HTTP_OK, response);
       MHD_destroy_response (response);
       return MHD_YES;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]