Commit abf9fadc authored by Roger Dingledine's avatar Roger Dingledine
Browse files

start working on serving bridge status from the dirport, for

bridge communities.


svn:r12927
parent a02d18f6
......@@ -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"),
......
......@@ -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);
......
......@@ -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. */
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment