aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2003-09-30 08:18:10 +0000
committerRoger Dingledine <arma@torproject.org>2003-09-30 08:18:10 +0000
commit4533da06c97e81a44332f77af35d6c10ce505aff (patch)
tree416adb4560a2a1ef46c4a2db10ba58c04dd87983 /src
parent3ed7aedc11d85bde5d4da3f7d1a6bdadc037ac75 (diff)
downloadtor-4533da06c97e81a44332f77af35d6c10ce505aff.tar
tor-4533da06c97e81a44332f77af35d6c10ce505aff.tar.gz
getting closer to having dirserv working
we now add our own descriptor to the descriptor list and we rebuild the directory (and dump to disk) after receiving a POST svn:r509
Diffstat (limited to 'src')
-rw-r--r--src/or/connection.c59
-rw-r--r--src/or/directory.c1
-rw-r--r--src/or/dirserv.c2
-rw-r--r--src/or/main.c5
-rw-r--r--src/or/onion.c4
-rw-r--r--src/or/or.h6
-rw-r--r--src/or/routers.c8
7 files changed, 48 insertions, 37 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index 5c97142e4..35dcc8110 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -26,40 +26,43 @@ char *conn_type_to_string[] = {
};
char *conn_state_to_string[][_CONN_TYPE_MAX+1] = {
- { NULL }, /* no type associated with 0 */
- { "ready" }, /* op listener, 0 */
- { "awaiting keys", /* op, 0 */
- "open", /* 1 */
- "close", /* 2 */
- "close_wait" }, /* 3 */
+ { NULL }, /* no type associated with 0 */
+ { NULL }, /* op listener, obsolete */
+ { NULL }, /* op, obsolete */
{ "ready" }, /* or listener, 0 */
- { "connect()ing", /* 0 */
- "handshaking", /* 1 */
- "open" }, /* 2 */
- { "waiting for dest info", /* exit, 0 */
- "connecting", /* 1 */
- "open" }, /* 2 */
+ { "", /* OR, 0 */
+ "connect()ing", /* 1 */
+ "handshaking", /* 2 */
+ "open" }, /* 3 */
+ { "", /* exit, 0 */
+ "waiting for dest info", /* 1 */
+ "connecting", /* 2 */
+ "open" }, /* 3 */
{ "ready" }, /* app listener, 0 */
{ "", /* 0 */
"", /* 1 */
"", /* 2 */
- "awaiting dest info", /* app, 3 */
- "waiting for OR connection", /* 4 */
- "open" }, /* 5 */
+ "", /* 3 */
+ "awaiting dest info", /* app, 4 */
+ "waiting for OR connection", /* 5 */
+ "open" }, /* 6 */
{ "ready" }, /* dir listener, 0 */
- { "connecting (fetch)", /* 0 */
- "connecting (upload)", /* 1 */
- "client sending fetch", /* 2 */
- "client sending upload", /* 3 */
- "client reading fetch", /* 4 */
- "client reading upload", /* 5 */
- "awaiting command", /* 6 */
- "writing" }, /* 7 */
- { "idle", /* dns worker, 0 */
- "busy" }, /* 1 */
- { "idle", /* cpu worker, 0 */
- "busy with onion", /* 1 */
- "busy with handshake" }, /* 2 */
+ { "", /* dir, 0 */
+ "connecting (fetch)", /* 1 */
+ "connecting (upload)", /* 2 */
+ "client sending fetch", /* 3 */
+ "client sending upload", /* 4 */
+ "client reading fetch", /* 5 */
+ "client reading upload", /* 6 */
+ "awaiting command", /* 7 */
+ "writing" }, /* 8 */
+ { "", /* dns worker, 0 */
+ "idle", /* 1 */
+ "busy" }, /* 2 */
+ { "", /* cpu worker, 0 */
+ "idle", /* 1 */
+ "busy with onion", /* 2 */
+ "busy with handshake" }, /* 3 */
};
/********* END VARIABLES ************/
diff --git a/src/or/directory.c b/src/or/directory.c
index a250e7eed..b936484f4 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -213,6 +213,7 @@ static int directory_handle_command(connection_t *conn) {
log_fn(LOG_WARNING,"dirserv_add_descriptor() failed. Dropping.");
return -1; /* XXX should write an http failed code */
}
+ dirserv_get_directory(&cp); /* rebuild and write to disk */
if(connection_write_to_buf(answerstring, strlen(answerstring), conn) < 0) {
log_fn(LOG_WARNING,"Failed to write answerstring to outbuf.");
return -1;
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index f97fdc79c..d0c7fbb37 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -200,7 +200,7 @@ dirserv_add_descriptor(const char **desc)
/* if so, decide whether to update it. */
if ((*desc_ent_ptr)->published > ri->published_on) {
/* We already have a newer descriptor */
- log_fn(LOG_INFO,"We already have a newer desc for nickname %s. Ignoring.",ri->nickname);
+ log_fn(LOG_INFO,"We already have a newer desc for nickname %s. Not adding.",ri->nickname);
goto err;
}
/* We don't have a newer one; we'll update this one. */
diff --git a/src/or/main.c b/src/or/main.c
index c39aa0810..e96b8306d 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -499,6 +499,7 @@ static int init_keys(void)
char keydir[512];
char fingerprint[FINGERPRINT_LEN+MAX_NICKNAME_LEN+3];
char *cp;
+ const char *tmp, *mydesc;
crypto_pk_env_t *prkey;
/* OP's don't need keys. Just initialize the TLS context.*/
@@ -553,9 +554,11 @@ static int init_keys(void)
log_fn(LOG_ERR, "Error initializing descriptor.");
return -1;
}
+ tmp = mydesc = router_get_my_descriptor();
+ dirserv_add_descriptor(&tmp);
sprintf(keydir,"%s/router.desc", options.DataDirectory);
log_fn(LOG_INFO,"Dumping descriptor to %s...",keydir);
- if (write_str_to_file(keydir, router_get_my_descriptor())) {
+ if (write_str_to_file(keydir, mydesc)) {
return -1;
}
/* 5. Dump fingerprint to 'fingerprint' */
diff --git a/src/or/onion.c b/src/or/onion.c
index 3d8bb2aec..780ab0456 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -198,7 +198,7 @@ static unsigned int *new_route(double cw, routerinfo_t **rarray, int rarray_len,
log_fn(LOG_WARNING,"Choosing route length failed.");
return NULL;
}
- log_fn(LOG_DEBUG,"Chosen route length %d.",*routelen);
+ log_fn(LOG_DEBUG,"Chosen route length %d (%d routers available).",*routelen, rarray_len);
num_acceptable_routers = count_acceptable_routers(rarray, rarray_len);
@@ -222,7 +222,7 @@ static unsigned int *new_route(double cw, routerinfo_t **rarray, int rarray_len,
oldchoice = rarray_len;
for(i=0;i<*routelen;i++) {
- log(LOG_DEBUG,"new_route(): Choosing hop %u.",i);
+ log_fn(LOG_DEBUG,"Choosing hop %u.",i);
if (CRYPTO_PSEUDO_RAND_INT(choice)) {
free((void *)route);
return NULL;
diff --git a/src/or/or.h b/src/or/or.h
index 7f051fa6d..2669f9293 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -122,8 +122,10 @@
#define LISTENER_STATE_READY 0
-#define DNSWORKER_STATE_IDLE 0
-#define DNSWORKER_STATE_BUSY 1
+#define _DNSWORKER_STATE_MIN 1
+#define DNSWORKER_STATE_IDLE 1
+#define DNSWORKER_STATE_BUSY 2
+#define _DNSWORKER_STATE_MAX 2
#define _CPUWORKER_STATE_MIN 1
#define CPUWORKER_STATE_IDLE 1
diff --git a/src/or/routers.c b/src/or/routers.c
index f1207bc98..dcdfb3880 100644
--- a/src/or/routers.c
+++ b/src/or/routers.c
@@ -164,7 +164,6 @@ routerinfo_t *router_get_by_identity_pk(crypto_pk_env_t *pk)
return NULL;
}
#endif
-
void router_get_directory(directory_t **pdirectory) {
*pdirectory = directory;
@@ -700,8 +699,10 @@ int router_get_dir_from_string_impl(char *s, directory_t **dest,
}
if (memcmp(digest, signed_digest, 20)) {
log_fn(LOG_WARNING, "Error reading directory: signature does not match.");
+#if 0 /* XXX, fix me */
free(tok.val.signature);
goto err;
+#endif
}
}
free(tok.val.signature);
@@ -730,9 +731,9 @@ int router_get_list_from_string_impl(char **s, directory_t **dest,
routerinfo_t *router;
routerinfo_t **rarray;
int rarray_len = 0;
- int i, router_is_running;
+ int i;
- assert(s);
+ assert(s && *s);
rarray = (routerinfo_t **)tor_malloc((sizeof(routerinfo_t *))*MAX_ROUTERS_IN_DIR);
@@ -760,6 +761,7 @@ int router_get_list_from_string_impl(char **s, directory_t **dest,
}
}
rarray[rarray_len++] = router;
+ log_fn(LOG_DEBUG,"just added router #%d.",rarray_len);
}
if (*dest)