Loading lib/hostip.c +43 −3 Original line number Original line Diff line number Diff line Loading @@ -98,11 +98,49 @@ struct curl_dns_cache_entry { time_t timestamp; time_t timestamp; }; }; static int _num_chars(int i) { int chars = 0; do { chars++; i = (int) i / 10; } while (i > 1); return chars; } static char * _create_hostcache_id(char *server, int server_len, int port) { char *id = NULL; int id_len; id_len = server_len + _num_chars(port); id = malloc(id_len + 1); if (!id) { return NULL; } id_len = sprintf(id, "%s:%d", server, port); if (id_len <= 0) { free(id); return NULL; } return id; } Curl_addrinfo *Curl_resolv(struct SessionHandle *data, Curl_addrinfo *Curl_resolv(struct SessionHandle *data, char *hostname, char *hostname, int port, int port, char **bufp) char **bufp) { { char *cache_id = NULL; struct curl_dns_cache_entry *p = NULL; struct curl_dns_cache_entry *p = NULL; size_t hostname_len; size_t hostname_len; time_t now; time_t now; Loading @@ -113,11 +151,13 @@ Curl_addrinfo *Curl_resolv(struct SessionHandle *data, return Curl_getaddrinfo(data, hostname, port, bufp); return Curl_getaddrinfo(data, hostname, port, bufp); } } hostname_len = strlen(hostname)+1; hostname_len = strlen(hostname); cache_id = _create_hostcache_id(hostname, hostname_len, port); time(&now); time(&now); /* See if its already in our dns cache */ /* See if its already in our dns cache */ if (curl_hash_find(data->hostcache, hostname, hostname_len, (void **) &p)) { if (cache_id && curl_hash_find(data->hostcache, hostname, hostname_len+1, (void **) &p)) { /* Do we need to check for a cache timeout? */ /* Do we need to check for a cache timeout? */ if (data->set.dns_cache_timeout != -1) { if (data->set.dns_cache_timeout != -1) { /* Return if the entry has not timed out */ /* Return if the entry has not timed out */ Loading @@ -144,7 +184,7 @@ Curl_addrinfo *Curl_resolv(struct SessionHandle *data, p->timestamp = now; p->timestamp = now; /* Save it in our host cache */ /* Save it in our host cache */ curl_hash_update(data->hostcache, hostname, hostname_len, (const void *) p); curl_hash_update(data->hostcache, hostname, hostname_len+1, (const void *) p); return p->addr; return p->addr; } } Loading Loading
lib/hostip.c +43 −3 Original line number Original line Diff line number Diff line Loading @@ -98,11 +98,49 @@ struct curl_dns_cache_entry { time_t timestamp; time_t timestamp; }; }; static int _num_chars(int i) { int chars = 0; do { chars++; i = (int) i / 10; } while (i > 1); return chars; } static char * _create_hostcache_id(char *server, int server_len, int port) { char *id = NULL; int id_len; id_len = server_len + _num_chars(port); id = malloc(id_len + 1); if (!id) { return NULL; } id_len = sprintf(id, "%s:%d", server, port); if (id_len <= 0) { free(id); return NULL; } return id; } Curl_addrinfo *Curl_resolv(struct SessionHandle *data, Curl_addrinfo *Curl_resolv(struct SessionHandle *data, char *hostname, char *hostname, int port, int port, char **bufp) char **bufp) { { char *cache_id = NULL; struct curl_dns_cache_entry *p = NULL; struct curl_dns_cache_entry *p = NULL; size_t hostname_len; size_t hostname_len; time_t now; time_t now; Loading @@ -113,11 +151,13 @@ Curl_addrinfo *Curl_resolv(struct SessionHandle *data, return Curl_getaddrinfo(data, hostname, port, bufp); return Curl_getaddrinfo(data, hostname, port, bufp); } } hostname_len = strlen(hostname)+1; hostname_len = strlen(hostname); cache_id = _create_hostcache_id(hostname, hostname_len, port); time(&now); time(&now); /* See if its already in our dns cache */ /* See if its already in our dns cache */ if (curl_hash_find(data->hostcache, hostname, hostname_len, (void **) &p)) { if (cache_id && curl_hash_find(data->hostcache, hostname, hostname_len+1, (void **) &p)) { /* Do we need to check for a cache timeout? */ /* Do we need to check for a cache timeout? */ if (data->set.dns_cache_timeout != -1) { if (data->set.dns_cache_timeout != -1) { /* Return if the entry has not timed out */ /* Return if the entry has not timed out */ Loading @@ -144,7 +184,7 @@ Curl_addrinfo *Curl_resolv(struct SessionHandle *data, p->timestamp = now; p->timestamp = now; /* Save it in our host cache */ /* Save it in our host cache */ curl_hash_update(data->hostcache, hostname, hostname_len, (const void *) p); curl_hash_update(data->hostcache, hostname, hostname_len+1, (const void *) p); return p->addr; return p->addr; } } Loading