}
-
+/**
+ * Check if a sessions exists for an specific address
+ *
+ * @param plugin the plugin
+ * @param address the address
+ * @return the session or NULL
+ */
static struct Session *
client_lookup_session (struct HTTP_Client_Plugin *plugin,
const struct GNUNET_HELLO_Address *address)
GNUNET_break (s->ats_address_network_type != ntohl (GNUNET_ATS_NET_UNSPECIFIED));
delay = s->plugin->env->receive (plugin->env->cls, &s->target, message,
- (const struct GNUNET_ATS_Information *) &atsi, 2,
s, s->addr, s->addrlen);
+ plugin->env->update_address_metrics (plugin->env->cls,
+ &s->target,
+ s->addr,
+ s->addrlen,
+ s,
+ (struct GNUNET_ATS_Information *) &atsi, 2);
+
GNUNET_asprintf (&stat_txt, "# bytes received via %s_client", plugin->protocol);
GNUNET_STATISTICS_update (plugin->env->stats,
stat_txt, ntohs(message->size), GNUNET_NO);
if (GNUNET_YES == s->put_reconnect_required)
{
s->put_reconnect_required = GNUNET_NO;
- client_connect_put(s);
+ if (GNUNET_SYSERR == client_connect_put(s))
+ {
+ GNUNET_break (s->client_put == NULL);
+ GNUNET_break (s->put_tmp_disconnected == GNUNET_NO);
+ }
}
}
if (easy_h == s->client_get)
client_schedule (plugin, GNUNET_NO);
}
+
+/**
+ * Connect GET connection for a session
+ *
+ * @param s the session to connect
+ * @return GNUNET_OK on success, GNUNET_SYSERR otherwise
+ */
static int
client_connect_get (struct Session *s)
{
curl_easy_setopt (s->client_get, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_easy_setopt (s->client_get, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt (s->client_get, CURLOPT_SSL_VERIFYHOST, 0);
+ curl_easy_setopt (s->client_get, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
+ curl_easy_setopt (s->client_get, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS);
+#else
+ curl_easy_setopt (s->client_get, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
+ curl_easy_setopt (s->client_get, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP);
#endif
+
+ curl_easy_setopt (s->client_get, CURLOPT_URL, s->url);
+ curl_easy_setopt (s->client_get, CURLOPT_URL, s->url);
curl_easy_setopt (s->client_get, CURLOPT_URL, s->url);
//curl_easy_setopt (s->client_get, CURLOPT_HEADERFUNCTION, &curl_get_header_cb);
//curl_easy_setopt (s->client_get, CURLOPT_WRITEHEADER, ps);
#if CURL_TCP_NODELAY
curl_easy_setopt (ps->recv_endpoint, CURLOPT_TCP_NODELAY, 1);
#endif
+ curl_easy_setopt (s->client_get, CURLOPT_FOLLOWLOCATION, 0);
+
mret = curl_multi_add_handle (s->plugin->curl_multi_handle, s->client_get);
if (mret != CURLM_OK)
{
curl_easy_setopt (s->client_put, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_easy_setopt (s->client_put, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt (s->client_put, CURLOPT_SSL_VERIFYHOST, 0);
+ curl_easy_setopt (s->client_get, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
+ curl_easy_setopt (s->client_get, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS);
+#else
+ curl_easy_setopt (s->client_get, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
+ curl_easy_setopt (s->client_get, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP);
#endif
curl_easy_setopt (s->client_put, CURLOPT_URL, s->url);
curl_easy_setopt (s->client_put, CURLOPT_UPLOAD, 1L);
s->client_put = NULL;
s->put.easyhandle = NULL;
s->put.s = NULL;
+ s->put_tmp_disconnected = GNUNET_YES;
return GNUNET_SYSERR;
}
+ s->put_tmp_disconnected = GNUNET_NO;
return GNUNET_OK;
}
+
+/**
+ * Connect both PUT and GET connection for a session
+ *
+ * @param s the session to connect
+ * @return GNUNET_OK on success, GNUNET_SYSERR otherwise
+ */
static int
client_connect (struct Session *s)
{
{
salen = sizeof (struct sockaddr_in);
}
- else if (AF_INET == sa->sa_family)
+ else if (AF_INET6 == sa->sa_family)
{
salen = sizeof (struct sockaddr_in6);
}
ats = plugin->env->get_address_type (plugin->env->cls, sa, salen);
+ //fprintf (stderr, "Address %s is in %s\n", GNUNET_a2s (sa,salen), GNUNET_ATS_print_network_type(ntohl(ats.value)));
GNUNET_free (sa);
}
else if (GNUNET_NO == res)