error msg
[oweals/gnunet.git] / src / transport / plugin_transport_http_server.c
index d447846ef077b6e3628140ab7d4f3aad47de6164..97a28b694faf9fc49b73f4c52a953d7d93f4ce83 100644 (file)
 #define _RECEIVE 0
 #define _SEND 1
 
+
+/* Enable output for debbuging URL's of incoming requests */
+#define DEBUG_URL_PARSE GNUNET_NO
+
+
 /**
  * Encapsulation of all of the state of the plugin.
  */
@@ -530,18 +535,24 @@ http_server_plugin_send (void *cls,
       GNUNET_break (0);
       return GNUNET_SYSERR;
   }
-  if ((NULL == session->server_send) && (GNUNET_NO == session->connect_in_progress))
+  if (NULL == session->server_send)
   {
+     if (GNUNET_NO == session->connect_in_progress)
+     {
       GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, session->plugin->name,
                        "Session %p/connection %p: Sending message with %u bytes to peer `%s' with FAILED\n",
                        session, session->server_send,
                        msgbuf_size, GNUNET_i2s (&session->target));
       GNUNET_break (0);
       return GNUNET_SYSERR;
+     }
+  }
+  else
+  {
+      if (GNUNET_YES == session->server_send->disconnect)
+        return GNUNET_SYSERR;
   }
 
-  if ((NULL != session->server_send) && (GNUNET_YES == session->server_send->disconnect))
-    return GNUNET_SYSERR;
 
   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, session->plugin->name,
                    "Session %p/connection %p: Sending message with %u to peer `%s' with \n",
@@ -566,9 +577,13 @@ http_server_plugin_send (void *cls,
                             stat_txt, msgbuf_size, GNUNET_NO);
   GNUNET_free (stat_txt);
 
-  server_reschedule (session->plugin, session->server_send->mhd_daemon,
-      (NULL != session->server_send) ? GNUNET_YES : GNUNET_NO);
-  server_reschedule_session_timeout (session);
+  if (NULL != session->server_send)
+  {
+      server_reschedule (session->plugin,
+                         session->server_send->mhd_daemon,
+                         GNUNET_YES);
+      server_reschedule_session_timeout (session);
+  }
   return bytes_sent;
 }
 
@@ -881,8 +896,6 @@ server_mhd_connection_timeout (struct HTTP_Server_Plugin *plugin, struct Session
 static int
 server_parse_url (struct HTTP_Server_Plugin *plugin, const char * url, struct GNUNET_PeerIdentity * target, uint32_t *tag)
 {
-  int debug = GNUNET_YES;
-
   char * tag_start = NULL;
   char * tag_end = NULL;
   char * target_start = NULL;
@@ -906,7 +919,7 @@ server_parse_url (struct HTTP_Server_Plugin *plugin, const char * url, struct GN
 
   if (NULL == separator)
   {
-      if (debug) GNUNET_break (0);
+      if (DEBUG_URL_PARSE) GNUNET_break (0);
       return GNUNET_SYSERR;
   }
   tag_start = separator + 1;
@@ -914,42 +927,42 @@ server_parse_url (struct HTTP_Server_Plugin *plugin, const char * url, struct GN
   if (strlen (tag_start) == 0)
   {
     /* No tag after separator */
-    if (debug) GNUNET_break (0);
+    if (DEBUG_URL_PARSE) GNUNET_break (0);
     return GNUNET_SYSERR;
   }
   ctag = strtoul (tag_start, &tag_end, 10);
   if (ctag == 0)
   {
     /* tag == 0 , invalid */
-    if (debug) GNUNET_break (0);
+    if (DEBUG_URL_PARSE) GNUNET_break (0);
     return GNUNET_SYSERR;
   }
   if ((ctag == ULONG_MAX) && (ERANGE == errno))
   {
     /* out of range: > ULONG_MAX */
-    if (debug) GNUNET_break (0);
+    if (DEBUG_URL_PARSE) GNUNET_break (0);
     return GNUNET_SYSERR;
   }
   if (ctag > UINT32_MAX)
   {
     /* out of range: > UINT32_MAX */
-    if (debug) GNUNET_break (0);
+    if (DEBUG_URL_PARSE) GNUNET_break (0);
     return GNUNET_SYSERR;
   }
   (*tag) = (uint32_t) ctag;
   if (NULL == tag_end)
   {
       /* no char after tag */
-      if (debug) GNUNET_break (0);
+      if (DEBUG_URL_PARSE) GNUNET_break (0);
       return GNUNET_SYSERR;
   }
   if (url[strlen(url)] != tag_end[0])
   {
       /* there are more not converted chars after tag */
-      if (debug) GNUNET_break (0);
+      if (DEBUG_URL_PARSE) GNUNET_break (0);
       return GNUNET_SYSERR;
   }
-  if (debug)
+  if (DEBUG_URL_PARSE)
     GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
        "Found tag `%u' in url\n", (*tag));
 
@@ -965,7 +978,7 @@ server_parse_url (struct HTTP_Server_Plugin *plugin, const char * url, struct GN
   if (hash_length != plugin->peer_id_length)
   {
       /* no char after tag */
-      if (debug) GNUNET_break (0);
+      if (DEBUG_URL_PARSE) GNUNET_break (0);
       return GNUNET_SYSERR;
   }
   memcpy (hash, target_start, hash_length);
@@ -974,7 +987,7 @@ server_parse_url (struct HTTP_Server_Plugin *plugin, const char * url, struct GN
   if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((const char *) hash, &(target->hashPubKey)))
   {
       /* hash conversion failed */
-      if (debug) GNUNET_break (0);
+      if (DEBUG_URL_PARSE) GNUNET_break (0);
       return GNUNET_SYSERR;
   }
 
@@ -1343,6 +1356,9 @@ server_access_cb (void *cls, struct MHD_Connection *mhd_connection,
     else
     {
       response = MHD_create_response_from_data (strlen (HTTP_ERROR_RESPONSE), HTTP_ERROR_RESPONSE, MHD_NO, MHD_NO);
+      MHD_add_response_header (response,
+                              MHD_HTTP_HEADER_CONTENT_TYPE,
+                              "text/html");
       res = MHD_queue_response (mhd_connection, MHD_HTTP_NOT_FOUND, response);
       MHD_destroy_response (response);
       return res;