summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-05-12 23:48:57 +0000
committerRoger Dingledine <arma@torproject.org>2004-05-12 23:48:57 +0000
commit5ba9235873d63dfe7ed7ae09fb0d0d3e33523ed3 (patch)
tree4e351173790bc3ee5d357e1a74a1ea4f331d9eac /src/or
parent630e9307991a29b30e633634ea2e93b46a0e5f31 (diff)
downloadtor-5ba9235873d63dfe7ed7ae09fb0d0d3e33523ed3.tar.gz
tor-5ba9235873d63dfe7ed7ae09fb0d0d3e33523ed3.zip
clean up directory.c API
svn:r1860
Diffstat (limited to 'src/or')
-rw-r--r--src/or/command.c2
-rw-r--r--src/or/directory.c85
-rw-r--r--src/or/main.c10
-rw-r--r--src/or/or.h9
-rw-r--r--src/or/rendclient.c5
-rw-r--r--src/or/rendservice.c2
-rw-r--r--src/or/router.c25
7 files changed, 86 insertions, 52 deletions
diff --git a/src/or/command.c b/src/or/command.c
index 4b898efc28..d65f8c309b 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -10,7 +10,7 @@
/* In-points to command.c:
*
* - command_process_cell(), called from
- * connection_or_process_cells_from_inbuf() in connection_or.c.
+ * connection_or_process_cells_from_inbuf() in connection_or.c
*/
#include "or.h"
diff --git a/src/or/directory.c b/src/or/directory.c
index 083fa8cc71..aa97c7c419 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -9,6 +9,26 @@
* \brief Implement directory HTTP protocol.
**/
+/* In-points to directory.c:
+ *
+ * - directory_post_to_dirservers(), called from
+ * router_upload_dir_desc_to_dirservers() in router.c
+ * upload_service_descriptor() in rendservice.c
+ * - directory_get_from_dirserver(), called from
+ * rend_client_refetch_renddesc() in rendclient.c
+ * run_scheduled_events() in main.c
+ * do_hup() in main.c
+ * - connection_dir_process_inbuf(), called from
+ * connection_process_inbuf() in connection.c
+ * - connection_dir_finished_flushing(), called from
+ * connection_finished_flushing() in connection.c
+ * - connection_dir_finished_connecting(), called from
+ * connection_finished_connecting() in connection.c
+ */
+
+static void
+directory_initiate_command(routerinfo_t *router, uint8_t purpose,
+ const char *payload, int payload_len);
static void directory_send_command(connection_t *conn, int purpose,
const char *payload, int payload_len);
static int directory_handle_command(connection_t *conn);
@@ -27,6 +47,43 @@ char rend_fetch_url[] = "/rendezvous/";
/********* END VARIABLES ************/
+/** Start a connection to every known directory server, using
+ * connection purpose 'purpose' and uploading the payload 'payload'
+ * (length 'payload_len'). The purpose should be one of
+ * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'.
+ */
+void
+directory_post_to_dirservers(uint8_t purpose, const char *payload,
+ int payload_len)
+{
+ int i;
+ routerinfo_t *router;
+ routerlist_t *rl;
+
+ router_get_routerlist(&rl);
+ if(!rl)
+ return;
+
+ for(i=0; i < smartlist_len(rl->routers); i++) {
+ router = smartlist_get(rl->routers, i);
+ if(router->dir_port > 0)
+ directory_initiate_command(router, purpose, payload, payload_len);
+ }
+}
+
+/** Start a connection to a random running directory server, using
+ * connection purpose 'purpose' requesting 'payload' (length
+ * 'payload_len'). The purpose should be one of
+ * 'DIR_PURPOSE_FETCH_DIR' or 'DIR_PURPOSE_FETCH_RENDDESC'.
+ */
+void
+directory_get_from_dirserver(uint8_t purpose, const char *payload,
+ int payload_len)
+{
+ directory_initiate_command(router_pick_directory_server(),
+ purpose, payload, payload_len);
+}
+
/** Launch a new connection to the directory server <b>router</b> to upload or
* download a service or rendezvous descriptor. <b>purpose</b> determines what
* kind of directory connection we're launching, and must be one of
@@ -36,8 +93,10 @@ char rend_fetch_url[] = "/rendezvous/";
* of the HTTP post. When fetching a rendezvous descriptor, <b>payload</b>
* and <b>payload_len</b> are the service ID we want to fetch.
*/
-void directory_initiate_command(routerinfo_t *router, int purpose,
- const char *payload, int payload_len) {
+static void
+directory_initiate_command(routerinfo_t *router, uint8_t purpose,
+ const char *payload, int payload_len)
+{
connection_t *conn;
switch (purpose)
@@ -169,7 +228,9 @@ static void directory_send_command(connection_t *conn, int purpose,
* null-terminate it (this modifies headers!) and return 0.
* Otherwise, return -1.
*/
-int parse_http_url(char *headers, char **url) {
+static int
+parse_http_url(char *headers, char **url)
+{
char *s, *tmp;
s = (char *)eat_whitespace_no_nl(headers);
@@ -193,7 +254,9 @@ int parse_http_url(char *headers, char **url) {
* (else leave it alone), and return 0.
* Otherwise, return -1.
*/
-int parse_http_response(char *headers, int *code, char **message) {
+static int
+parse_http_response(char *headers, int *code, char **message)
+{
int n1, n2;
tor_assert(headers && code);
@@ -368,9 +431,10 @@ static char answer503[] = "HTTP/1.0 503 Directory unavailable\r\n\r\n";
* service descriptor. On finding one, write a response into
* conn-\>outbuf. If the request is unrecognized, send a 404.
* Always return 0. */
-static int directory_handle_command_get(connection_t *conn,
- char *headers, char *body,
- int body_len) {
+static int
+directory_handle_command_get(connection_t *conn, char *headers,
+ char *body, int body_len)
+{
size_t dlen;
const char *cp;
char *url;
@@ -434,9 +498,10 @@ static int directory_handle_command_get(connection_t *conn,
* service descriptor. On finding one, process it and write a
* response into conn-\>outbuf. If the request is unrecognized, send a
* 404. Always return 0. */
-static int directory_handle_command_post(connection_t *conn,
- char *headers, char *body,
- int body_len) {
+static int
+directory_handle_command_post(connection_t *conn, char *headers,
+ char *body, int body_len)
+{
const char *cp;
char *url;
diff --git a/src/or/main.c b/src/or/main.c
index dc58990000..f2f74717e5 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -330,10 +330,6 @@ void directory_has_arrived(void) {
log_fn(LOG_INFO, "A directory has arrived.");
- /* just for testing */
-// directory_initiate_command(router_pick_directory_server(),
-// DIR_PURPOSE_FETCH_RENDDESC, "foo", 3);
-
has_fetched_directory=1;
if(options.ORPort) { /* connect to them all */
@@ -445,8 +441,7 @@ static void run_scheduled_events(time_t now) {
if(!options.DirPort) {
/* NOTE directory servers do not currently fetch directories.
* Hope this doesn't bite us later. */
- directory_initiate_command(router_pick_directory_server(),
- DIR_PURPOSE_FETCH_DIR, NULL, 0);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 0);
} else {
/* We're a directory; dump any old descriptors. */
dirserv_remove_old_servers();
@@ -641,8 +636,7 @@ static int do_hup(void) {
rend_services_introduce();
} else {
/* fetch a new directory */
- directory_initiate_command(router_pick_directory_server(),
- DIR_PURPOSE_FETCH_DIR, NULL, 0);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 0);
}
if(options.ORPort) {
router_rebuild_descriptor();
diff --git a/src/or/or.h b/src/or/or.h
index 81e5b965b5..212815c9c2 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -864,7 +864,6 @@ void assert_buf_ok(buf_t *buf);
extern char *circuit_state_to_string[];
circuit_t *circuit_new(uint16_t p_circ_id, connection_t *p_conn);
void circuit_close_all_marked(void);
-void circuit_free_cpath(crypt_path_t *cpath);
int _circuit_mark_for_close(circuit_t *circ);
#define circuit_mark_for_close(c) \
@@ -1069,8 +1068,10 @@ int assign_to_cpuworker(connection_t *cpuworker, unsigned char question_type,
/********************************* directory.c ***************************/
-void directory_initiate_command(routerinfo_t *router, int purpose,
- const char *payload, int payload_len);
+void directory_post_to_dirservers(uint8_t purpose, const char *payload,
+ int payload_len);
+void directory_get_from_dirserver(uint8_t purpose, const char *payload,
+ int payload_len);
int connection_dir_process_inbuf(connection_t *conn);
int connection_dir_finished_flushing(connection_t *conn);
int connection_dir_finished_connecting(connection_t *conn);
@@ -1190,7 +1191,6 @@ void rend_client_desc_fetched(char *query, int success);
char *rend_client_get_random_intro(char *query);
int rend_parse_rendezvous_address(char *address);
-int rend_client_send_establish_rendezvous(circuit_t *circ);
int rend_client_send_introduction(circuit_t *introcirc, circuit_t *rendcirc);
/********************************* rendcommon.c ***************************/
@@ -1265,7 +1265,6 @@ void rotate_onion_key(void);
void router_retry_connections(void);
void router_upload_dir_desc_to_dirservers(void);
-void router_post_to_dirservers(uint8_t purpose, const char *payload, int payload_len);
int router_compare_to_my_exit_policy(connection_t *conn);
routerinfo_t *router_get_my_routerinfo(void);
const char *router_get_my_descriptor(void);
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index e9de2965ec..af27dc799c 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -228,9 +228,8 @@ rend_client_refetch_renddesc(const char *query)
log_fn(LOG_INFO,"Would fetch a new renddesc here (for %s), but one is already in progress.", query);
} else {
/* not one already; initiate a dir rend desc lookup */
- directory_initiate_command(router_pick_directory_server(),
- DIR_PURPOSE_FETCH_RENDDESC,
- query, strlen(query));
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_RENDDESC,
+ query, strlen(query));
}
}
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index db114ad283..a42b576aa7 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -744,7 +744,7 @@ upload_service_descriptor(rend_service_t *service)
}
/* Post it to the dirservers */
- router_post_to_dirservers(DIR_PURPOSE_UPLOAD_RENDDESC, desc, desc_len);
+ directory_post_to_dirservers(DIR_PURPOSE_UPLOAD_RENDDESC, desc, desc_len);
tor_free(desc);
service->desc_is_dirty = 0;
diff --git a/src/or/router.c b/src/or/router.c
index ccf9235b37..a7957864f8 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -321,30 +321,7 @@ void router_upload_dir_desc_to_dirservers(void) {
log_fn(LOG_WARN, "No descriptor; skipping upload");
return;
}
- router_post_to_dirservers(DIR_PURPOSE_UPLOAD_DIR, s, strlen(s));
-}
-
-/** Start a connection to every known directory server, using
- * connection purpose 'purpose' and uploading the payload 'payload'
- * (length 'payload_len'). The purpose should be one of
- * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'.
- */
-/* XXXX This is misnamed; it shouldn't be a router-only function; it should
- * XXXX be in directory, since rendservice uses it too. */
-void router_post_to_dirservers(uint8_t purpose, const char *payload, int payload_len) {
- int i;
- routerinfo_t *router;
- routerlist_t *rl;
-
- router_get_routerlist(&rl);
- if(!rl)
- return;
-
- for(i=0; i < smartlist_len(rl->routers); i++) {
- router = smartlist_get(rl->routers, i);
- if(router->dir_port > 0)
- directory_initiate_command(router, purpose, payload, payload_len);
- }
+ directory_post_to_dirservers(DIR_PURPOSE_UPLOAD_DIR, s, strlen(s));
}
/** Append the comma-separated sequence of exit policies in <b>s</b> to the