From 983df8eafd4a10a2f5053264806cbcdeb96f0dd4 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Wed, 6 Jun 2012 14:07:30 +0000 Subject: [PATCH] -leho, proxy ssl --- src/gns/gnunet-gns-proxy.c | 28 ++++++++++++++++++++++++++-- src/include/gnunet_gns_service.h | 3 ++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c index 10a81b073..3c6943687 100644 --- a/src/gns/gnunet-gns-proxy.c +++ b/src/gns/gnunet-gns-proxy.c @@ -131,6 +131,9 @@ struct ProxyCurlTask /* Optional header replacements for curl (LEHO) */ struct curl_slist *headers; + /* Optional resolver replacements for curl (LEHO) */ + struct curl_slist *resolver; + /* The URL to fetch */ char url[2048]; @@ -880,6 +883,10 @@ process_leho_lookup (void *cls, int i; CURLcode ret; CURLMcode mret; + struct hostent *phost; + char *ssl_ip; + char resolvename[512]; + char curlurl[512]; ctask->headers = NULL; @@ -912,6 +919,19 @@ process_leho_lookup (void *cls, } + if (ctask->mhd->is_ssl) + { + phost = (struct hostent*)gethostbyname (ctask->host); + ssl_ip = inet_ntoa(*((struct in_addr*)(phost->h_addr))); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "SSL target server: %s\n", ssl_ip); + sprintf (resolvename, "%s:%d:%s", ctask->leho, HTTPS_PORT, ssl_ip); + ctask->resolver = curl_slist_append ( ctask->resolver, resolvename); + curl_easy_setopt (ctask->curl, CURLOPT_RESOLVE, ctask->resolver); + sprintf (curlurl, "https://%s%s", ctask->leho, ctask->url); + curl_easy_setopt (ctask->curl, CURLOPT_URL, curlurl); + } + if (CURLM_OK != (mret=curl_multi_add_handle (curl_multi, ctask->curl))) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -1001,6 +1021,9 @@ create_response (void *cls, char curlurl[512]; int ret = MHD_YES; + struct hostent *phost; + char *ssl_ip; + struct ProxyCurlTask *ctask; if (0 != strcmp (meth, "GET")) @@ -1058,9 +1081,10 @@ create_response (void *cls, curl_easy_setopt (ctask->curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt (ctask->curl, CURLOPT_MAXREDIRS, 4); /* no need to abort if the above failed */ - sprintf (curlurl, "http://%s%s", host, url); + if (GNUNET_NO == ctask->mhd->is_ssl) + sprintf (curlurl, "http://%s%s", host, url); strcpy (ctask->host, host); - strcpy (ctask->url, curlurl); + strcpy (ctask->url, url); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding new curl task for %s\n", curlurl); diff --git a/src/include/gnunet_gns_service.h b/src/include/gnunet_gns_service.h index 4e040f777..64dbcd25a 100644 --- a/src/include/gnunet_gns_service.h +++ b/src/include/gnunet_gns_service.h @@ -79,7 +79,8 @@ enum GNUNET_GNS_RecordType /* GNS specific */ GNUNET_GNS_RECORD_PKEY = GNUNET_NAMESTORE_TYPE_PKEY, GNUNET_GNS_RECORD_PSEU = GNUNET_NAMESTORE_TYPE_PSEU, - GNUNET_GNS_RECORD_ANY = GNUNET_NAMESTORE_TYPE_ANY + GNUNET_GNS_RECORD_ANY = GNUNET_NAMESTORE_TYPE_ANY, + GNUNET_GNS_RECORD_LEHO = GNUNET_NAMESTORE_TYPE_LEHO }; /** -- 2.25.1