-leho, proxy ssl
authorMartin Schanzenbach <mschanzenbach@posteo.de>
Wed, 6 Jun 2012 14:07:30 +0000 (14:07 +0000)
committerMartin Schanzenbach <mschanzenbach@posteo.de>
Wed, 6 Jun 2012 14:07:30 +0000 (14:07 +0000)
src/gns/gnunet-gns-proxy.c
src/include/gnunet_gns_service.h

index 10a81b0733297a18ff1d91059d438ba58a1b28a1..3c694368730d59bfb331b8dd4db6dbd3e34f5a24 100644 (file)
@@ -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);
   
index 4e040f7778469aaea109180ee8ef8d5b0e4975f8..64dbcd25a64a1afc16d5841b7eb28864ed49a534 100644 (file)
@@ -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
 };
 
 /**