aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-gns-proxy.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-06-11 13:05:41 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-06-11 13:05:41 +0000
commitcf2c937c4b721637c75db4d727cb456f23705d92 (patch)
tree1ca5d6bc393fed03303443715b343a2ba01cb77a /src/gns/gnunet-gns-proxy.c
parent7dd98f2b11fd2a2f5c2212b973243d26c4387b29 (diff)
downloadgnunet-cf2c937c4b721637c75db4d727cb456f23705d92.tar.gz
gnunet-cf2c937c4b721637c75db4d727cb456f23705d92.zip
-unix domain sockets
Diffstat (limited to 'src/gns/gnunet-gns-proxy.c')
-rw-r--r--src/gns/gnunet-gns-proxy.c86
1 files changed, 64 insertions, 22 deletions
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index fcfe2c762..f9e8c1119 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -36,6 +36,8 @@
36 36
37#define GNUNET_GNS_PROXY_PORT 7777 37#define GNUNET_GNS_PROXY_PORT 7777
38 38
39#define MHD_UNIX_SOCK_FILE "mhd_unix_sock.sock"
40
39/* MHD/cURL defines */ 41/* MHD/cURL defines */
40#define BUF_WAIT_FOR_CURL 0 42#define BUF_WAIT_FOR_CURL 0
41#define BUF_WAIT_FOR_MHD 1 43#define BUF_WAIT_FOR_MHD 1
@@ -268,6 +270,9 @@ static struct GNUNET_CRYPTO_ShortHashCode local_gns_zone;
268/* The CA for SSL certificate generation */ 270/* The CA for SSL certificate generation */
269static struct ProxyCA proxy_ca; 271static struct ProxyCA proxy_ca;
270 272
273/* UNIX domain socket for mhd */
274struct GNUNET_NETWORK_Handle *mhd_unix_socket;
275
271/** 276/**
272 * Checks if name is in tld 277 * Checks if name is in tld
273 * 278 *
@@ -1483,10 +1488,6 @@ add_handle_to_mhd (struct GNUNET_NETWORK_Handle *h, struct MHD_Daemon *daemon)
1483} 1488}
1484 1489
1485 1490
1486/*TODO this needs MHD API modification */
1487static int http_port = 4444;
1488
1489
1490static long 1491static long
1491get_file_size (const char* filename) 1492get_file_size (const char* filename)
1492{ 1493{
@@ -1728,16 +1729,19 @@ add_handle_to_ssl_mhd (struct GNUNET_NETWORK_Handle *h, char* domain)
1728 hd->is_ssl = GNUNET_YES; 1729 hd->is_ssl = GNUNET_YES;
1729 strcpy (hd->domain, domain); 1730 strcpy (hd->domain, domain);
1730 hd->proxy_cert = pgc; 1731 hd->proxy_cert = pgc;
1731 hd->daemon = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_SSL, http_port++, 1732 hd->daemon = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_SSL, 4444,
1732 NULL, NULL, 1733 NULL, NULL,
1733 &create_response, hd, 1734 &create_response, hd,
1734 MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 128, 1735 MHD_OPTION_LISTEN_SOCKET, GNUNET_NETWORK_get_fd (mhd_unix_socket),
1735 MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, 1736 MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 128,
1736 MHD_OPTION_NOTIFY_COMPLETED, 1737 MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
1737 NULL, NULL, 1738 MHD_OPTION_NOTIFY_COMPLETED,
1738 MHD_OPTION_HTTPS_MEM_KEY, pgc->key, 1739 NULL, NULL,
1739 MHD_OPTION_HTTPS_MEM_CERT, pgc->cert, 1740 MHD_OPTION_HTTPS_MEM_KEY, pgc->key,
1740 MHD_OPTION_END); 1741 MHD_OPTION_HTTPS_MEM_CERT, pgc->cert,
1742 MHD_OPTION_END);
1743
1744 GNUNET_assert (hd->daemon != NULL);
1741 hd->httpd_task = GNUNET_SCHEDULER_NO_TASK; 1745 hd->httpd_task = GNUNET_SCHEDULER_NO_TASK;
1742 1746
1743 GNUNET_CONTAINER_DLL_insert (mhd_httpd_head, mhd_httpd_tail, hd); 1747 GNUNET_CONTAINER_DLL_insert (mhd_httpd_head, mhd_httpd_tail, hd);
@@ -2228,6 +2232,8 @@ run (void *cls, char *const *args, const char *cfgfile,
2228{ 2232{
2229 struct sockaddr_in sa; 2233 struct sockaddr_in sa;
2230 struct MhdHttpList *hd; 2234 struct MhdHttpList *hd;
2235 struct sockaddr_un mhd_unix_sock_addr;
2236 size_t len;
2231 2237
2232 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2238 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2233 "Loading CA\n"); 2239 "Loading CA\n");
@@ -2313,17 +2319,53 @@ run (void *cls, char *const *args, const char *cfgfile,
2313 mhd_httpd_head = NULL; 2319 mhd_httpd_head = NULL;
2314 mhd_httpd_tail = NULL; 2320 mhd_httpd_tail = NULL;
2315 2321
2322 mhd_unix_socket = GNUNET_NETWORK_socket_create (AF_UNIX,
2323 SOCK_STREAM,
2324 0);
2325
2326 if (NULL == mhd_unix_socket)
2327 {
2328 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
2329 "Unable to create unix domain socket!\n");
2330 return;
2331 }
2332
2333 mhd_unix_sock_addr.sun_family = AF_UNIX;
2334 strcpy (mhd_unix_sock_addr.sun_path, MHD_UNIX_SOCK_FILE);
2335 unlink (MHD_UNIX_SOCK_FILE);
2336 len = strlen (MHD_UNIX_SOCK_FILE) + sizeof(AF_UNIX);
2337
2338 if (GNUNET_OK != GNUNET_NETWORK_socket_bind (mhd_unix_socket,
2339 (struct sockaddr*)&mhd_unix_sock_addr,
2340 len))
2341 {
2342 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
2343 "Unable to bind unix domain socket!\n");
2344 return;
2345 }
2346
2347 if (GNUNET_OK != GNUNET_NETWORK_socket_listen (mhd_unix_socket,
2348 1))
2349 {
2350 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
2351 "Unable to listen on unix domain socket!\n");
2352 return;
2353 }
2354
2316 hd = GNUNET_malloc (sizeof (struct MhdHttpList)); 2355 hd = GNUNET_malloc (sizeof (struct MhdHttpList));
2317 hd->is_ssl = GNUNET_NO; 2356 hd->is_ssl = GNUNET_NO;
2318 strcpy (hd->domain, ""); 2357 strcpy (hd->domain, "");
2319 httpd = MHD_start_daemon (MHD_USE_DEBUG, http_port++, 2358 httpd = MHD_start_daemon (MHD_USE_DEBUG, 4444, //Dummy port
2320 NULL, NULL, 2359 NULL, NULL,
2321 &create_response, hd, 2360 &create_response, hd,
2322 MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 128, 2361 MHD_OPTION_LISTEN_SOCKET, GNUNET_NETWORK_get_fd (mhd_unix_socket),
2323 MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, 2362 MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 128,
2324 MHD_OPTION_NOTIFY_COMPLETED, 2363 MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
2325 NULL, NULL, 2364 MHD_OPTION_NOTIFY_COMPLETED,
2326 MHD_OPTION_END); 2365 NULL, NULL,
2366 MHD_OPTION_END);
2367
2368 GNUNET_assert (httpd != NULL);
2327 hd->daemon = httpd; 2369 hd->daemon = httpd;
2328 hd->httpd_task = GNUNET_SCHEDULER_NO_TASK; 2370 hd->httpd_task = GNUNET_SCHEDULER_NO_TASK;
2329 2371