Controller: Add CACHED keyword to ADDRMAP events (#8596 part 2/2)

Add keyword CACHED="YES"/"NO" to ADDRMAP control events to indicate whether the
DNS response will be cached or not.
This commit is contained in:
Desoxy 2013-04-03 18:50:51 +02:00
parent 2c40138210
commit 74f5e304e4
5 changed files with 18 additions and 13 deletions

3
changes/bug8596 Normal file
View File

@ -0,0 +1,3 @@
o Minor features:
- Add CACHED keyword to ADDRMAP events in the control protocol to indicate
whether a DNS result will be cached or not.

View File

@ -560,7 +560,7 @@ addressmap_register(const char *address, char *new_address, time_t expires,
log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'",
safe_str_client(address),
safe_str_client(ent->new_address));
control_event_address_mapped(address, ent->new_address, expires, NULL);
control_event_address_mapped(address, ent->new_address, expires, NULL, 1);
}
/** An attempt to resolve <b>address</b> failed at some OR.

View File

@ -2044,18 +2044,17 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
char *cp = tor_dup_ip(ntohl(get_uint32(answer)));
control_event_address_mapped(conn->socks_request->address,
cp, expires, NULL);
cp, expires, NULL, 0);
tor_free(cp);
} else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256) {
char *cp = tor_strndup(answer, answer_len);
control_event_address_mapped(conn->socks_request->address,
cp, expires, NULL);
cp, expires, NULL, 0);
tor_free(cp);
} else {
control_event_address_mapped(conn->socks_request->address,
"<error>",
time(NULL)+ttl,
"error=yes");
"<error>", time(NULL)+ttl,
"error=yes", 0);
}
}

View File

@ -2947,7 +2947,7 @@ handle_control_resolve(control_connection_t *conn, uint32_t len,
send_control_done(conn);
SMARTLIST_FOREACH(failed, const char *, arg, {
control_event_address_mapped(arg, arg, time(NULL),
"internal");
"internal", 0);
});
SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
@ -4024,15 +4024,17 @@ control_event_descriptors_changed(smartlist_t *routers)
*/
int
control_event_address_mapped(const char *from, const char *to, time_t expires,
const char *error)
const char *error, const int cached)
{
if (!EVENT_IS_INTERESTING(EVENT_ADDRMAP))
return 0;
if (expires < 3 || expires == TIME_MAX)
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
"650 ADDRMAP %s %s NEVER %s\r\n", from, to,
error?error:"");
"650 ADDRMAP %s %s NEVER %s%s"
"CACHED=\"%s\"\r\n",
from, to, error?error:"", error?" ":"",
cached?"YES":"NO");
else {
char buf[ISO_TIME_LEN+1];
char buf2[ISO_TIME_LEN+1];
@ -4040,10 +4042,10 @@ control_event_address_mapped(const char *from, const char *to, time_t expires,
format_iso_time(buf2,expires);
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
"650 ADDRMAP %s %s \"%s\""
" %s%sEXPIRES=\"%s\"\r\n",
" %s%sEXPIRES=\"%s\" CACHED=\"%s\"\r\n",
from, to, buf,
error?error:"", error?" ":"",
buf2);
buf2, cached?"YES":"NO");
}
return 0;

View File

@ -53,7 +53,8 @@ int control_event_stream_bandwidth_used(void);
void control_event_logmsg(int severity, uint32_t domain, const char *msg);
int control_event_descriptors_changed(smartlist_t *routers);
int control_event_address_mapped(const char *from, const char *to,
time_t expires, const char *error);
time_t expires, const char *error,
const int cached);
int control_event_or_authdir_new_descriptor(const char *action,
const char *desc,
size_t desclen,