diff options
author | Nick Mathewson <nickm@torproject.org> | 2003-09-30 22:44:33 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2003-09-30 22:44:33 +0000 |
commit | bd7db5bd87c0282f37f92b35ca88b4e1a2f61a1d (patch) | |
tree | a9290806e6d3dd03ca45a999e04cbc08c13ff9dd /src/or | |
parent | 8551509d5c2979c435d32e21591247682b0f8e41 (diff) | |
download | tor-bd7db5bd87c0282f37f92b35ca88b4e1a2f61a1d.tar tor-bd7db5bd87c0282f37f92b35ca88b4e1a2f61a1d.tar.gz |
Add "platform" to router descriptors.
svn:r522
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/main.c | 26 | ||||
-rw-r--r-- | src/or/routers.c | 8 |
2 files changed, 33 insertions, 1 deletions
diff --git a/src/or/main.c b/src/or/main.c index 1c4fa09a2..3151a2d97 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -3,6 +3,9 @@ /* $Id$ */ #include "or.h" +#ifdef HAVE_UNAME +#include <sys/utsname.h> +#endif /********* START PROTOTYPES **********/ @@ -672,11 +675,28 @@ static void dumpstats(void) { /* dump stats to stdout */ } } +static void get_platform_str(char *platform, int len) +{ +#ifdef HAVE_UNAME + struct utsname u; + if (!uname(&u)) { + snprintf(platform, len-1, "Tor %s on %s %s %s %s %s", + VERSION, u.sysname, u.nodename, u.release, u.version, u.machine); + platform[len-1] = '\0'; + return; + } else +#endif + { + snprintf(platform, len-1, "Tor %s", VERSION); + } +} + int dump_router_to_string(char *s, int maxlen, routerinfo_t *router, crypto_pk_env_t *ident_key) { char *onion_pkey; char *link_pkey; char *identity_pkey; + char platform[256]; char digest[20]; char signature[128]; char published[32]; @@ -684,6 +704,8 @@ int dump_router_to_string(char *s, int maxlen, routerinfo_t *router, int written; int result=0; struct exit_policy_t *tmpe; + + get_platform_str(platform, 256); if(crypto_pk_write_public_key_to_string(router->onion_pkey, &onion_pkey,&onion_pkeylen)<0) { @@ -706,16 +728,18 @@ int dump_router_to_string(char *s, int maxlen, routerinfo_t *router, result = snprintf(s, maxlen, "router %s %s %d %d %d %d\n" + "platform %s\n" "published %s\n" "onion-key\n%s" "link-key\n%s" "signing-key\n%s", - router->nickname, + router->nickname, router->address, router->or_port, router->ap_port, router->dir_port, router->bandwidth, + platform, published, onion_pkey, link_pkey, identity_pkey); diff --git a/src/or/routers.c b/src/or/routers.c index a991a3933..5e0d609aa 100644 --- a/src/or/routers.c +++ b/src/or/routers.c @@ -275,6 +275,7 @@ typedef enum { K_ROUTER_SIGNATURE, K_PUBLISHED, K_RUNNING_ROUTERS, + K_PLATFORM, _SIGNATURE, _PUBLIC_KEY, _ERR, @@ -296,6 +297,7 @@ static struct token_table_ent token_table[] = { { "router-signature", K_ROUTER_SIGNATURE }, { "published", K_PUBLISHED }, { "running-routers", K_RUNNING_ROUTERS }, + { "platform", K_PLATFORM }, { NULL, -1 } }; @@ -453,6 +455,7 @@ router_dump_token(directory_token_t *tok) { case K_ROUTER_SIGNATURE: printf("Router-signature"); break; case K_PUBLISHED: printf("Published"); break; case K_RUNNING_ROUTERS: printf("Running-routers"); break; + case K_PLATFORM: printf("Platform"); break; default: printf("?????? %d\n", tok->tp); return; } @@ -886,7 +889,12 @@ routerinfo_t *router_get_entry_from_string(char**s) { log_fn(LOG_DEBUG,"or_port %d, ap_port %d, dir_port %d, bandwidth %d.", router->or_port, router->ap_port, router->dir_port, router->bandwidth); + /* XXX Later, require platform before published. */ NEXT_TOKEN(); + if (tok->tp == K_PLATFORM) { + NEXT_TOKEN(); + } + if (tok->tp != K_PUBLISHED) { log_fn(LOG_WARNING, "Missing published time"); goto err; } |