Refactor directory_send_command to take a directory_request_t

This commit is contained in:
Nick Mathewson 2017-04-21 15:49:10 -04:00
parent 900d36e3b1
commit cc677e88d4

View file

@ -98,9 +98,8 @@
* connection_finished_connecting() in connection.c
*/
static void directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since);
int direct,
const directory_request_t *request);
static int body_is_plausible(const char *body, size_t body_len, int purpose);
static char *http_get_header(const char *headers, const char *which);
static void http_set_address_origin(const char *headers, connection_t *conn);
@ -1320,9 +1319,6 @@ directory_initiate_request,(directory_request_t *request))
const uint8_t router_purpose = request->router_purpose;
const dir_indirection_t indirection = request->indirection;
const char *resource = request->resource;
const char *payload = request->payload;
const size_t payload_len = request->payload_len;
const time_t if_modified_since = request->if_modified_since;
const rend_data_t *rend_query = request->rend_query;
circuit_guard_state_t *guard_state = request->guard_state;
@ -1441,9 +1437,7 @@ directory_initiate_request,(directory_request_t *request))
/* fall through */
case 0:
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 1, resource,
payload, payload_len,
if_modified_since);
directory_send_command(conn, 1, request);
connection_watch_events(TO_CONN(conn), READ_EVENT | WRITE_EVENT);
/* writable indicates finish, readable indicates broken link,
error indicates broken link in windowsland. */
@ -1497,9 +1491,7 @@ directory_initiate_request,(directory_request_t *request))
}
conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING;
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 0, resource,
payload, payload_len,
if_modified_since);
directory_send_command(conn, 0, request);
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
connection_start_reading(ENTRY_TO_CONN(linked_conn));
@ -1602,17 +1594,22 @@ copy_ipv6_address(char* destination, const char* source, size_t len,
}
}
/** Queue an appropriate HTTP command on conn-\>outbuf. The other args
* are as in directory_request_set_...()
*
*
/** Queue an appropriate HTTP command for <b>request</b> on
* <b>conn</b>-\>outbuf. If <b>direct</b> is true, we're making a
* non-anonymized connection to the dirport.
*/
static void
directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since)
const int direct,
const directory_request_t *req)
{
tor_assert(req);
const int purpose = req->dir_purpose;
const char *resource = req->resource;
const char *payload = req->payload;
const size_t payload_len = req->payload_len;
const time_t if_modified_since = req->if_modified_since;
char proxystring[256];
char hoststring[128];
/* NEEDS to be the same size hoststring.