diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-06-11 13:05:41 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-06-11 13:05:41 +0000 |
commit | cf2c937c4b721637c75db4d727cb456f23705d92 (patch) | |
tree | 1ca5d6bc393fed03303443715b343a2ba01cb77a /src/gns/gnunet-gns-proxy.c | |
parent | 7dd98f2b11fd2a2f5c2212b973243d26c4387b29 (diff) | |
download | gnunet-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.c | 86 |
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 */ |
269 | static struct ProxyCA proxy_ca; | 271 | static struct ProxyCA proxy_ca; |
270 | 272 | ||
273 | /* UNIX domain socket for mhd */ | ||
274 | struct 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 */ | ||
1487 | static int http_port = 4444; | ||
1488 | |||
1489 | |||
1490 | static long | 1491 | static long |
1491 | get_file_size (const char* filename) | 1492 | get_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 | ||