cookie: simplifications
No binary (build failed)
—
(log yok)
| @@ -1294,6 +1294,14 @@ static int cookie_sort_ct(const void *p1, const void *p2) | |
| return (c2->creationtime > c1->creationtime) ? 1 : -1; | |
| } | |
| + | bool Curl_secure_context(struct connectdata *conn, const char *host) |
| + | { |
| + | return conn->handler->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS) || |
| + | curl_strequal("localhost", host) || |
| + | !strcmp(host, "127.0.0.1") || |
| + | !strcmp(host, "::1"); |
| + | } |
| + | |
| /* | |
| * Curl_cookie_getlist | |
| * | |
| @@ -1306,15 +1314,17 @@ static int cookie_sort_ct(const void *p1, const void *p2) | |
| * Returns 0 when there is a list returned. Otherwise non-zero. | |
| */ | |
| int Curl_cookie_getlist(struct Curl_easy *data, | |
| - | struct CookieInfo *ci, |
| - | const char *host, const char *path, |
| - | bool secure, |
| + | struct connectdata *conn, |
| + | const char *host, |
| struct Curl_llist *list) | |
| { | |
| size_t matches = 0; | |
| - | bool is_ip; |
| + | const bool is_ip = Curl_host_is_ipnum(host); |
| const size_t myhash = cookiehash(host); | |
| struct Curl_llist_node *n; | |
| + | const bool secure = Curl_secure_context(conn, host); |
| + | struct CookieInfo *ci = data->cookies; |
| + | const char *path = data->state.up.path; |
| Curl_llist_init(list, NULL); | |
| @@ -1324,9 +1334,6 @@ int Curl_cookie_getlist(struct Curl_easy *data, | |
| /* at first, remove expired cookies */ | |
| remove_expired(ci); | |
| - | /* check if host is an IP(v4|v6) address */ |
| - | is_ip = Curl_host_is_ipnum(host); |
| - | |
| for(n = Curl_llist_head(&ci->cookielist[myhash]); | |
| n; n = Curl_node_next(n)) { | |
| struct Cookie *co = Curl_node_elem(n); | |
| @@ -105,21 +105,21 @@ struct CookieInfo { | |
| #define MAX_COOKIE_SEND_AMOUNT 150 | |
| struct Curl_easy; | |
| + | struct connectdata; |
| + | |
| /* | |
| * Add a cookie to the internal list of cookies. The domain and path arguments | |
| * are only used if the header boolean is TRUE. | |
| */ | |
| + | bool Curl_secure_context(struct connectdata *conn, const char *host); |
| struct Cookie *Curl_cookie_add(struct Curl_easy *data, | |
| struct CookieInfo *c, bool header, | |
| bool noexpiry, const char *lineptr, | |
| const char *domain, const char *path, | |
| bool secure); | |
| - | |
| - | int Curl_cookie_getlist(struct Curl_easy *data, |
| - | struct CookieInfo *c, const char *host, |
| - | const char *path, bool secure, |
| - | struct Curl_llist *list); |
| + | int Curl_cookie_getlist(struct Curl_easy *data, struct connectdata *conn, |
| + | const char *host, struct Curl_llist *list); |
| void Curl_cookie_clearall(struct CookieInfo *cookies); | |
| void Curl_cookie_clearsess(struct CookieInfo *cookies); | |
| @@ -2442,14 +2442,8 @@ static CURLcode http_cookies(struct Curl_easy *data, | |
| if(data->cookies && data->state.cookie_engine) { | |
| const char *host = data->state.aptr.cookiehost ? | |
| data->state.aptr.cookiehost : conn->host.name; | |
| - | const bool secure_context = |
| - | conn->handler->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS) || |
| - | curl_strequal("localhost", host) || |
| - | !strcmp(host, "127.0.0.1") || |
| - | !strcmp(host, "::1"); |
| Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); | |
| - | rc = Curl_cookie_getlist(data, data->cookies, host, data->state.up.path, |
| - | secure_context, &list); |
| + | rc = Curl_cookie_getlist(data, conn, host, &list); |
| Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); | |
| } | |
| if(!rc) { | |
| @@ -3334,14 +3328,8 @@ static CURLcode http_header_s(struct Curl_easy *data, | |
| * real peer hostname. */ | |
| const char *host = data->state.aptr.cookiehost ? | |
| data->state.aptr.cookiehost : conn->host.name; | |
| - | const bool secure_context = |
| - | conn->handler->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS) || |
| - | curl_strequal("localhost", host) || |
| - | !strcmp(host, "127.0.0.1") || |
| - | !strcmp(host, "::1"); |
| - | |
| - | Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, |
| - | CURL_LOCK_ACCESS_SINGLE); |
| + | const bool secure_context = Curl_secure_context(conn, host); |
| + | Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); |
| Curl_cookie_add(data, data->cookies, TRUE, FALSE, v, host, | |
| data->state.up.path, secure_context); | |
| Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); | |