Commit 4533da06 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

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
parent 3ed7aedc
......@@ -27,39 +27,42 @@ 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 }, /* 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 ************/
......
......@@ -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;
......
......@@ -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. */
......
......@@ -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' */
......
......@@ -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;
......
......@@ -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
......
......@@ -165,7 +165,6 @@ routerinfo_t *router_get_by_identity_pk(crypto_pk_env_t *pk)
}
#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)
......
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