diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-07-08 22:31:17 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2012-07-08 22:31:17 +0000 |
commit | f81d7b035d644d2ebc4631b3cca3bf57b93d542b (patch) | |
tree | 29babb160ae02b8ac5838ad327c62b311902fde2 /src/gns/gnunet-gns-proxy.c | |
parent | 71f190d1d34a96f7126e07128a975b798474f114 (diff) | |
download | gnunet-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.c | 98 |
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; |