diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-10-10 20:28:01 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-10-10 20:28:01 +0000 |
commit | dace37aee84501f26842a021e63f1b2e5a304643 (patch) | |
tree | d2f4c7c14757daf21227c6edb9fcf787cc2d49d4 /src/or/directory.c | |
parent | d9a99b9ba6582d40a929838e5af771204b9c964b (diff) | |
download | tor-dace37aee84501f26842a021e63f1b2e5a304643.tar tor-dace37aee84501f26842a021e63f1b2e5a304643.tar.gz |
r15656@catbus: nickm | 2007-10-10 16:23:18 -0400
Fix the implementation of if-modified-since for certificates so that it applies to all types of certificate requests. Note that the kind of consensus that matters already has a working if-modified-since.
svn:r11852
Diffstat (limited to 'src/or/directory.c')
-rw-r--r-- | src/or/directory.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/or/directory.c b/src/or/directory.c index 9dd218b4b..f1d534943 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2161,7 +2161,9 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, if (!strcmpstart(url,"/tor/status-vote/current/") || !strcmpstart(url,"/tor/status-vote/next/")) { - /*XXXX020 implement if-modified-since */ + /* XXXX If-modified-since is only the implemented for the current + * consensus: that's probably fine, since it's the only vote document + * people fetch much.*/ int current = 1; ssize_t body_len = 0; ssize_t estimated_len = 0; @@ -2321,7 +2323,6 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, } if (!strcmpstart(url,"/tor/keys/")) { - /*XXXX020 implement if-modified-since */ smartlist_t *certs = smartlist_create(); ssize_t len = -1; if (!strcmp(url, "/tor/keys/all")) { @@ -2331,8 +2332,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, if (!ds->v3_certs) continue; SMARTLIST_FOREACH(ds->v3_certs, authority_cert_t *, cert, - if (cert->cache_info.published_on >= if_modified_since) - smartlist_add(certs, cert)); + smartlist_add(certs, cert)); }); } else if (!strcmp(url, "/tor/keys/authority")) { authority_cert_t *cert = get_my_v3_authority_cert(); @@ -2368,6 +2368,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, smartlist_free(certs); goto keys_done; } + SMARTLIST_FOREACH(certs, authority_cert_t *, c, + if (cert->cache_info.published_on < if_modified_since) + SMARTLIST_DEL_CURRENT(certs, c)); + if (!smartlist_len(certs)) { + write_status_line(conn, 304, "Not modified"); + goto keys_done; + } len = 0; SMARTLIST_FOREACH(certs, authority_cert_t *, c, len += c->cache_info.signed_descriptor_len); |