mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
start working on serving bridge status from the dirport, for
bridge communities. svn:r12927
This commit is contained in:
@@ -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"),
|
||||
|
||||
+30
-1
@@ -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. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user