diff options
author | Roger Dingledine <arma@torproject.org> | 2007-12-22 10:54:21 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2007-12-22 10:54:21 +0000 |
commit | abf9fadccac0c5b4f4d93557bf2fce897ee540ed (patch) | |
tree | 144dfa0e56e4f65733ac9fb0560c80e11f2ac42c | |
parent | a02d18f6fb9a83706d6f4fe3cc590e00699e05a0 (diff) | |
download | tor-abf9fadccac0c5b4f4d93557bf2fce897ee540ed.tar.gz tor-abf9fadccac0c5b4f4d93557bf2fce897ee540ed.zip |
start working on serving bridge status from the dirport, for
bridge communities.
svn:r12927
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/directory.c | 31 | ||||
-rw-r--r-- | src/or/or.h | 6 |
3 files changed, 37 insertions, 1 deletions
diff --git a/src/or/config.c b/src/or/config.c index 1da844aba0..045a9b9a00 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -151,6 +151,7 @@ static config_var_t _option_vars[] = { V(BandwidthRate, MEMUNIT, "5 MB"), V(BridgeAuthoritativeDir, BOOL, "0"), VAR("Bridge", LINELIST, Bridges, NULL), + V(BridgePassword, STRING, NULL), V(BridgeRecordUsageByCountry, BOOL, "1"), V(BridgeRelay, BOOL, "0"), V(CircuitBuildTimeout, INTERVAL, "1 minute"), diff --git a/src/or/directory.c b/src/or/directory.c index 7d3aebfd03..85b0191e70 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2290,7 +2290,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, if (!strcmpstart(url,"/tor/status-vote/current/") || !strcmpstart(url,"/tor/status-vote/next/")) { - /* XXXX If-modified-since is only the implemented for the current + /* XXXX If-modified-since is only implemented for the current * consensus: that's probably fine, since it's the only vote document * people fetch much.*/ int current = 1; @@ -2592,6 +2592,35 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, goto done; } + if (options->BridgeAuthoritativeDir && + options->BridgePassword && + !strcmp(url,"/tor/networkstatus-bridges")) { + char *status; + size_t len; + + header = http_get_header(headers, "Authenticator: "); + + if (!header) { + write_http_status_line(conn, 404, "Not found"); + goto done; + } + + /* now make sure the password is right */ + if (1) { // check password_is_wrong(header) + write_http_status_line(conn, 404, "Not found"); + tor_free(header); + goto done; + } + + /* all happy now. send an answer. */ + status = networkstatus_getinfo_by_purpose("bridge", time(NULL)); + len = strlen(status); + write_http_response_header(conn, len, 0, 0); + connection_write_to_buf(status, len, TO_CONN(conn)); + tor_free(status); + goto done; + } + if (!strcmpstart(url,"/tor/bytes.txt")) { char *bytes = directory_dump_request_log(); size_t len = strlen(bytes); diff --git a/src/or/or.h b/src/or/or.h index 34ebe4e364..e33cfc68fe 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2089,6 +2089,12 @@ typedef struct { int BridgeAuthoritativeDir; /**< Boolean: is this an authoritative directory * that aggregates bridge descriptors? */ + /** If set on a bridge authority, it will answer requests on its dirport + * for bridge statuses -- but only if the requests use this password. + * If set on a bridge user, request bridge statuses, and use this password + * when doing so. */ + char *BridgePassword; + int UseBridges; /**< Boolean: should we start all circuits with a bridge? */ config_line_t *Bridges; /**< List of bootstrap bridge addresses. */ |