remove port from transport section because it was getting in the way of making sense...
[oweals/gnunet.git] / src / transport / plugin_transport_http.c
index c5d92eada2adaa235d8dc4c5e0e0f188486bf4e8..c2f8a6091b1c32c65064007762981c72c701b2cb 100644 (file)
@@ -1690,6 +1690,34 @@ static int curl_schedule(struct Plugin *plugin)
   return GNUNET_OK;
 }
 
+/**
+ * Function to log curl debug messages with GNUNET_log
+ * @param curl handle
+ * @param type curl_infotype
+ * @param data data
+ * @param size size
+ * @param cls  closure
+ * @return 0
+ */
+int curl_logger (CURL * curl, curl_infotype type , char * data, size_t size , void * cls)
+{
+       char * text = GNUNET_malloc(size+2);
+       if (type == CURLINFO_TEXT)
+       {
+               memcpy(text,data,size);
+               if (text[size-1] == '\n')
+                       text[size] = '\0';
+               else
+               {
+                       text[size] = '\n';
+                       text[size+1] = '\0';
+               }
+               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"CURL: Connection %X - %s", cls, text);
+               GNUNET_free(text);
+       }
+       return 0;
+}
+
 /**
  * Function setting up curl handle and selecting message to send
  *
@@ -1718,6 +1746,8 @@ static int send_check_connections (struct Plugin *plugin, struct Session *ps)
         }
 #if DEBUG_CURL
         curl_easy_setopt(ps->recv_endpoint, CURLOPT_VERBOSE, 1L);
+        curl_easy_setopt(ps->recv_endpoint, CURLOPT_DEBUGFUNCTION , &curl_logger);
+        curl_easy_setopt(ps->recv_endpoint, CURLOPT_DEBUGDATA , ps->recv_endpoint);
 #endif
 #if BUILD_HTTPS
         curl_easy_setopt (ps->recv_endpoint, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
@@ -1814,6 +1844,8 @@ static int send_check_connections (struct Plugin *plugin, struct Session *ps)
 
 #if DEBUG_CURL
                curl_easy_setopt(ps->send_endpoint, CURLOPT_VERBOSE, 1L);
+        curl_easy_setopt(ps->send_endpoint, CURLOPT_DEBUGFUNCTION , &curl_logger);
+        curl_easy_setopt(ps->send_endpoint, CURLOPT_DEBUGDATA , ps->send_endpoint);
 #endif
 #if BUILD_HTTPS
         curl_easy_setopt (ps->send_endpoint, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
@@ -2085,39 +2117,52 @@ http_plugin_send (void *cls,
   /* session not existing, but address forced -> creating new session */
   if (ps==NULL)
   {
-    if ((addr==NULL) && (addrlen==0))
-    {
+       if ((addr!=NULL) && (addrlen!=0))
+       {
+      ps = GNUNET_malloc(sizeof (struct Session));
+#if DEBUG_SESSION_SELECTION
+      if (force_address == GNUNET_YES)
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing connection & forced address: creating new session %X to peer %s\n", ps, GNUNET_i2s(target));
+      if (force_address != GNUNET_YES)
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing connection: creating new session %X to peer %s\n", ps, GNUNET_i2s(target));
+#endif
+      if ((addrlen!=0) && (addr!=NULL))
+      {
+         ps->addr = GNUNET_malloc(addrlen);
+         memcpy(ps->addr,addr,addrlen);
+         ps->addrlen = addrlen;
+      }
+         else
+         {
+               ps->addr = NULL;
+               ps->addrlen = 0;
+         }
+         ps->direction=OUTBOUND;
+         ps->recv_connected = GNUNET_NO;
+         ps->recv_force_disconnect = GNUNET_NO;
+         ps->send_connected = GNUNET_NO;
+         ps->send_force_disconnect = GNUNET_NO;
+         ps->pending_msgs_head = NULL;
+         ps->pending_msgs_tail = NULL;
+         ps->peercontext=pc;
+         ps->session_id = pc->session_id_counter;
+         pc->session_id_counter++;
+         ps->url = create_url (plugin, ps->addr, ps->addrlen, ps->session_id);
+         if (ps->msgtok == NULL)
+                       ps->msgtok = GNUNET_SERVER_mst_create (&curl_receive_mst_cb, ps);
+         GNUNET_CONTAINER_DLL_insert(pc->head,pc->tail,ps);
+         GNUNET_STATISTICS_update (plugin->env->stats,
+                                                               gettext_noop ("# HTTP outbound sessions for peers active"),
+                                                               1,
+                                                               GNUNET_NO);
+       }
+       else
+       {
 #if DEBUG_HTTP
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing session found & and no address given: no way to send this message to peer `%s'!\n", GNUNET_i2s(target));
+               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing session found & and no address given: no way to send this message to peer `%s'!\n", GNUNET_i2s(target));
 #endif
-      return GNUNET_SYSERR;
+               return GNUNET_SYSERR;
     }
-    ps = GNUNET_malloc(sizeof (struct Session));
-#if DEBUG_SESSION_SELECTION
-       if (force_address == GNUNET_YES)
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing connection & forced address: creating new session %X to peer %s\n", ps, GNUNET_i2s(target));
-       if (force_address != GNUNET_YES)
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"No existing connection: creating new session %X to peer %s\n", ps, GNUNET_i2s(target));
-#endif
-       ps->direction=OUTBOUND;
-       ps->recv_connected = GNUNET_NO;
-       ps->recv_force_disconnect = GNUNET_NO;
-       ps->send_connected = GNUNET_NO;
-       ps->send_force_disconnect = GNUNET_NO;
-       ps->pending_msgs_head = NULL;
-       ps->pending_msgs_tail = NULL;
-       ps->peercontext=pc;
-       ps->session_id = pc->session_id_counter;
-       pc->session_id_counter++;
-       ps->url = create_url (plugin, ps->addr, ps->addrlen, ps->session_id);
-       if (ps->msgtok == NULL)
-       ps->msgtok = GNUNET_SERVER_mst_create (&curl_receive_mst_cb, ps);
-       GNUNET_CONTAINER_DLL_insert(pc->head,pc->tail,ps);
-
-       GNUNET_STATISTICS_update (plugin->env->stats,
-                               gettext_noop ("# HTTP outbound sessions for peers active"),
-                               1,
-                               GNUNET_NO);
   }
 
   /* create msg */