#define DEBUG_MHD GNUNET_NO
#define DEBUG_CONNECTIONS GNUNET_NO
#define DEBUG_SESSION_SELECTION GNUNET_NO
-
+#define DEBUG_SCHEDULING GNUNET_NO
#define CURL_TCP_NODELAY GNUNET_YES
#define INBOUND GNUNET_NO
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"MHD: %s \n", text);
}
-/**
- * Callback called by MHD when a connection is terminated
- * @param cls closure
- * @param connection the terminated connection
- * @httpSessionCache the mhd session reference
- */
+
static void mhd_termination_cb (void *cls, struct MHD_Connection * connection, void **httpSessionCache)
{
struct Session * ps = *httpSessionCache;
if (ps == NULL)
return;
struct HTTP_PeerContext * pc = ps->peercontext;
-
+
if (connection==ps->recv_endpoint)
{
#if DEBUG_CONNECTIONS
if (haveto == MHD_YES)
tv.value = (uint64_t) timeout;
else
- tv = GNUNET_TIME_UNIT_FOREVER_REL;
+ tv = GNUNET_TIME_UNIT_SECONDS;
GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max);
GNUNET_NETWORK_fdset_copy_native (wws, &ws, max);
GNUNET_NETWORK_fdset_copy_native (wes, &es, max);
{
struct Plugin *plugin = cls;
+#if DEBUG_SCHEDULING
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v4_run: GNUNET_SCHEDULER_REASON_READ_READY\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v4_run: GNUNET_SCHEDULER_REASON_WRITE_READY\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v4_run: GNUNET_SCHEDULER_REASON_TIMEOUT\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_STARTUP))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v4_run: GGNUNET_SCHEDULER_REASON_STARTUP\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v4_run: GGNUNET_SCHEDULER_REASON_SHUTDOWN\n");
+#endif
+
GNUNET_assert(cls !=NULL);
plugin->http_server_task_v4 = GNUNET_SCHEDULER_NO_TASK;
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct Plugin *plugin = cls;
+
+#if DEBUG_SCHEDULING
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v6_run: GNUNET_SCHEDULER_REASON_READ_READY\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v6_run: GNUNET_SCHEDULER_REASON_WRITE_READY\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v6_run: GNUNET_SCHEDULER_REASON_TIMEOUT\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_STARTUP))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v6_run: GGNUNET_SCHEDULER_REASON_STARTUP\n");
+ if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"http_server_daemon_v6_run: GGNUNET_SCHEDULER_REASON_SHUTDOWN\n");
+#endif
GNUNET_assert(cls !=NULL);
plugin->http_server_task_v6 = GNUNET_SCHEDULER_NO_TASK;
if ( msg->pos == msg->size)
{
#if DEBUG_CONNECTIONS
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: Message with %u bytes sent, removing message from queue \n",ps, msg->pos);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,"Connection %X: Message with %u bytes sent, removing message from queue \n",ps, msg->pos);
#endif
/* Calling transmit continuation */
if (NULL != ps->pending_msgs_tail->transmit_cont)
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)
+{
+
+ if (type == CURLINFO_TEXT)
+ {
+ char text[size+2];
+ 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);
+ }
+ return 0;
+}
+
/**
* Function setting up curl handle and selecting message to send
*
}
#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);
#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);
/* 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 */
plugin->bind4_address->sin_family = AF_INET;
plugin->bind4_address->sin_port = htons (port);
- if (inet_pton(AF_INET,plugin->bind_hostname, &plugin->bind4_address->sin_addr)<=0)
+ if (plugin->bind_hostname!=NULL)
{
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
- component_name,
- _("Misconfigured address to bind to in configuration!\n"));
- GNUNET_free(plugin->bind4_address);
- GNUNET_free(plugin->bind_hostname);
- plugin->bind_hostname = NULL;
- plugin->bind4_address = NULL;
+ if (inet_pton(AF_INET,plugin->bind_hostname, &plugin->bind4_address->sin_addr)<=0)
+ {
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+ component_name,
+ _("Misconfigured address to bind to in configuration!\n"));
+ GNUNET_free(plugin->bind4_address);
+ GNUNET_free(plugin->bind_hostname);
+ plugin->bind_hostname = NULL;
+ plugin->bind4_address = NULL;
+ }
}
}
plugin->bind6_address = GNUNET_malloc(sizeof(struct sockaddr_in6));
plugin->bind6_address->sin6_family = AF_INET6;
plugin->bind6_address->sin6_port = htons (port);
-
- if (inet_pton(AF_INET6,plugin->bind_hostname, &plugin->bind6_address->sin6_addr)<=0)
+ if (plugin->bind_hostname!=NULL)
{
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
- component_name,
- _("Misconfigured address to bind to in configuration!\n"));
- GNUNET_free(plugin->bind6_address);
- GNUNET_free(plugin->bind_hostname);
- plugin->bind_hostname = NULL;
- plugin->bind6_address = NULL;
+ if (inet_pton(AF_INET6,plugin->bind_hostname, &plugin->bind6_address->sin6_addr)<=0)
+ {
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+ component_name,
+ _("Misconfigured address to bind to in configuration!\n"));
+ GNUNET_free(plugin->bind6_address);
+ GNUNET_free(plugin->bind_hostname);
+ plugin->bind_hostname = NULL;
+ plugin->bind6_address = NULL;
+ }
}
}
}