Sfoglia il codice sorgente

add Address config element, use it in descriptor

svn:r496
Roger Dingledine 20 anni fa
parent
commit
9899e09b3b
3 ha cambiato i file con 12 aggiunte e 6 eliminazioni
  1. 2 1
      src/or/config.c
  2. 9 5
      src/or/main.c
  3. 1 0
      src/or/or.h

+ 2 - 1
src/or/config.c

@@ -192,6 +192,7 @@ static void config_assign(or_options_t *options, struct config_line *list) {
     config_compare(list, "DataDirectory",  CONFIG_TYPE_STRING, &options->DataDirectory) ||
     config_compare(list, "RouterFile",     CONFIG_TYPE_STRING, &options->RouterFile) ||
     config_compare(list, "Nickname",       CONFIG_TYPE_STRING, &options->Nickname) ||
+    config_compare(list, "Address",        CONFIG_TYPE_STRING, &options->Address) ||
 
     /* int options */
     config_compare(list, "MaxConn",         CONFIG_TYPE_INT, &options->MaxConn) ||
@@ -277,7 +278,7 @@ int getconfig(int argc, char **argv, or_options_t *options) {
 /* Validate options */
 
   if(options->LogLevel) {
-    else if(!strcmp(options->LogLevel,"err"))
+    if(!strcmp(options->LogLevel,"err"))
       options->loglevel = LOG_ERR;
     else if(!strcmp(options->LogLevel,"warning"))
       options->loglevel = LOG_WARNING;

+ 9 - 5
src/or/main.c

@@ -938,15 +938,19 @@ const char *router_get_my_descriptor(void) {
 static int init_descriptor(void) {
   routerinfo_t *ri;
   char localhostname[256];
+  char *address = options.Address;
 
-  if(gethostname(localhostname,sizeof(localhostname)) < 0) {
-    log_fn(LOG_WARNING,"Error obtaining local hostname");
-    return -1;
+  if(!address) { /* if not specified in config, we find a default */
+    if(gethostname(localhostname,sizeof(localhostname)) < 0) {
+      log_fn(LOG_WARNING,"Error obtaining local hostname");
+      return -1;
+    }
+    address = localhostname;
   }
   ri = tor_malloc(sizeof(routerinfo_t));
-  ri->address = strdup(localhostname);
+  ri->address = strdup(address);
   ri->nickname = strdup(options.Nickname);
-  /* No need to set addr. ???? */
+  /* No need to set addr. */
   ri->or_port = options.ORPort;
   ri->ap_port = options.APPort;
   ri->dir_port = options.DirPort;

+ 1 - 0
src/or/or.h

@@ -408,6 +408,7 @@ typedef struct {
    char *DataDirectory;
    char *RouterFile;
    char *Nickname;
+   char *Address;
    double CoinWeight;
    int Daemon;
    int ORPort;