aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-gns-proxy.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-07-08 22:31:17 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-07-08 22:31:17 +0000
commitf81d7b035d644d2ebc4631b3cca3bf57b93d542b (patch)
tree29babb160ae02b8ac5838ad327c62b311902fde2 /src/gns/gnunet-gns-proxy.c
parent71f190d1d34a96f7126e07128a975b798474f114 (diff)
downloadgnunet-f81d7b035d644d2ebc4631b3cca3bf57b93d542b.tar.gz
gnunet-f81d7b035d644d2ebc4631b3cca3bf57b93d542b.zip
-add cookie support
Diffstat (limited to 'src/gns/gnunet-gns-proxy.c')
-rw-r--r--src/gns/gnunet-gns-proxy.c98
1 files changed, 76 insertions, 22 deletions
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index 4445245b3..b8b4247dc 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -407,8 +407,12 @@ curl_check_hdr (void *buffer, size_t size, size_t nmemb, void *cls)
407 int cookie_hdr_len = strlen (MHD_HTTP_HEADER_SET_COOKIE); 407 int cookie_hdr_len = strlen (MHD_HTTP_HEADER_SET_COOKIE);
408 char hdr_mime[html_mime_len+1]; 408 char hdr_mime[html_mime_len+1];
409 char hdr_cookie[bytes+1]; 409 char hdr_cookie[bytes+1];
410 //char hdr_cookie_gns[bytes+strlen (ctask->leho)+1]; 410 char new_cookie_hdr[bytes+strlen (ctask->leho)+1];
411 //char* ndup; 411 char* ndup;
412 char* tok;
413 char* cookie_domain;
414 int delta_cdomain;
415 size_t offset = 0;
412 416
413 if (html_mime_len <= bytes) 417 if (html_mime_len <= bytes)
414 { 418 {
@@ -439,16 +443,73 @@ curl_check_hdr (void *buffer, size_t size, size_t nmemb, void *cls)
439 MHD_HTTP_HEADER_SET_COOKIE, 443 MHD_HTTP_HEADER_SET_COOKIE,
440 cookie_hdr_len)) 444 cookie_hdr_len))
441 { 445 {
442 //ndup = GNUNET_strdup (hdr_cookie); 446 ndup = GNUNET_strdup (hdr_cookie+cookie_hdr_len+1);
443 //tok = strtok (ndup, ";"); 447 memset (new_cookie_hdr, 0, sizeof (new_cookie_hdr));
448 tok = strtok (ndup, ";");
444 449
445 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 450 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
446 "Got Set-Cookie HTTP header %s\n", hdr_cookie); 451 "Looking for cookie in : %s\n", hdr_cookie);
452
453 for (; tok != NULL; tok = strtok (NULL, ";"))
454 {
455 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
456 "Got Cookie token: %s\n", tok);
457 //memcpy (new_cookie_hdr+offset, tok, strlen (tok));
458 if (0 == memcmp (tok, " domain", strlen (" domain")))
459 {
460 cookie_domain = tok + strlen (" domain") + 1;
461
462 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
463 "Got Set-Cookie Domain: %s\n", cookie_domain);
464
465 if (strlen (cookie_domain) < strlen (ctask->leho))
466 {
467 delta_cdomain = strlen (ctask->leho) - strlen (cookie_domain);
468 if (0 == strcmp (cookie_domain, ctask->leho + (delta_cdomain)))
469 {
470 GNUNET_snprintf (new_cookie_hdr+offset,
471 sizeof (new_cookie_hdr),
472 " domain=%s", ctask->authority);
473 offset += strlen (" domain=") + strlen (ctask->authority);
474 new_cookie_hdr[offset] = ';';
475 offset++;
476 continue;
477 }
478 }
479 else if (strlen (cookie_domain) == strlen (ctask->leho))
480 {
481 if (0 == strcmp (cookie_domain, ctask->leho))
482 {
483 GNUNET_snprintf (new_cookie_hdr+offset,
484 sizeof (new_cookie_hdr),
485 " domain=%s", ctask->host);
486 offset += strlen (" domain=") + strlen (ctask->host);
487 new_cookie_hdr[offset] = ';';
488 offset++;
489 continue;
490 }
491 }
492 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
493 "Cookie domain invalid\n");
494
495
496 }
497 memcpy (new_cookie_hdr+offset, tok, strlen (tok));
498 offset += strlen (tok);
499 new_cookie_hdr[offset] = ';';
500 offset++;
501 }
502
503 //memcpy (new_cookie_hdr+offset, tok, strlen (tok));
504
505 GNUNET_free (ndup);
506
507 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
508 "Got Set-Cookie HTTP header %s\n", new_cookie_hdr);
509
447 //pch = GNUNET_malloc (sizeof (struct ProxySetCookieHeader)); 510 //pch = GNUNET_malloc (sizeof (struct ProxySetCookieHeader));
448 //len = strlen (hdr_cookie) - cookie_hdr_len - 1; 511 //len = strlen (hdr_cookie) - cookie_hdr_len - 1;
449 //pch->cookie = GNUNET_malloc (len + 1); 512 //pch->cookie = GNUNET_malloc (len + 1);
450 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
451 "Copying Set-Cookie data %s:\n", hdr_cookie+cookie_hdr_len+1);
452 //memset (pch->cookie, 0, len + 1); 513 //memset (pch->cookie, 0, len + 1);
453 //memcpy (pch->cookie, hdr_cookie+cookie_hdr_len+1, len); 514 //memcpy (pch->cookie, hdr_cookie+cookie_hdr_len+1, len);
454 //GNUNET_CONTAINER_DLL_insert (ctask->set_cookies_head, 515 //GNUNET_CONTAINER_DLL_insert (ctask->set_cookies_head,
@@ -457,21 +518,14 @@ curl_check_hdr (void *buffer, size_t size, size_t nmemb, void *cls)
457 //pch = ctask->set_cookies_head; 518 //pch = ctask->set_cookies_head;
458 //while (pch != NULL) 519 //while (pch != NULL)
459 //{ 520 //{
460 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 521 if (GNUNET_NO == MHD_add_response_header (ctask->response,
461 "MHD: adding cookie: %s\n", 522 MHD_HTTP_HEADER_SET_COOKIE,
523 new_cookie_hdr))
524 {
525 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
526 "MHD: Error adding set-cookie header field %s\n",
462 hdr_cookie+cookie_hdr_len+1); 527 hdr_cookie+cookie_hdr_len+1);
463 528 }
464 if (GNUNET_NO == MHD_add_response_header (ctask->response,
465 MHD_HTTP_HEADER_SET_COOKIE,
466 hdr_cookie+cookie_hdr_len+1))
467 {
468 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
469 "MHD: Error adding set-cookie header field %s\n",
470 hdr_cookie+cookie_hdr_len+1);
471 }
472 MHD_add_response_header (ctask->response,
473 MHD_HTTP_HEADER_SET_COOKIE,
474 "test=test; domain=homepage.gnunet; secure");
475 //GNUNET_free (pch->cookie); 529 //GNUNET_free (pch->cookie);
476 //GNUNET_CONTAINER_DLL_remove (ctask->set_cookies_head, 530 //GNUNET_CONTAINER_DLL_remove (ctask->set_cookies_head,
477 // ctask->set_cookies_tail, 531 // ctask->set_cookies_tail,
@@ -539,7 +593,7 @@ callback_download (void *ptr, size_t size, size_t nmemb, void *ctx)
539 { 593 {
540 MHD_queue_response (ctask->connection, 594 MHD_queue_response (ctask->connection,
541 MHD_HTTP_OK, 595 MHD_HTTP_OK,
542 ctask->response); 596 ctask->response);
543 ctask->con_status = MHD_YES; 597 ctask->con_status = MHD_YES;
544 } 598 }
545 total = size*nmemb; 599 total = size*nmemb;