aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2003-10-21 09:48:17 +0000
committerRoger Dingledine <arma@torproject.org>2003-10-21 09:48:17 +0000
commite4127e4d3666da72415ad5f673f2f6136531836f (patch)
tree6cffdc84c27d917b0293b1a1d1ef1503b45dedf8
parent80d428b2253e085382edcdb7b741329f9a0f36c0 (diff)
downloadtor-e4127e4d3666da72415ad5f673f2f6136531836f.tar
tor-e4127e4d3666da72415ad5f673f2f6136531836f.tar.gz
move closer to being able to reload config on HUP
rename APPort to SocksPort introduce new tor_free() macro svn:r642
-rw-r--r--src/or/circuit.c6
-rw-r--r--src/or/config.c49
-rw-r--r--src/or/connection.c6
-rw-r--r--src/or/connection_or.c3
-rw-r--r--src/or/dirserv.c16
-rw-r--r--src/or/main.c4
-rw-r--r--src/or/onion.c4
-rw-r--r--src/or/or.h6
-rw-r--r--src/or/routers.c39
-rw-r--r--src/or/test.c16
10 files changed, 79 insertions, 70 deletions
diff --git a/src/or/circuit.c b/src/or/circuit.c
index d3053eb27..18597fd4d 100644
--- a/src/or/circuit.c
+++ b/src/or/circuit.c
@@ -481,7 +481,7 @@ void circuit_close(circuit_t *circ) {
circuit_t *youngest=NULL;
assert(circ);
- if(options.APPort) {
+ if(options.SocksPort) {
youngest = circuit_get_newest_open();
log_fn(LOG_DEBUG,"youngest %d, circ %d.",(int)youngest, (int)circ);
}
@@ -496,7 +496,7 @@ void circuit_close(circuit_t *circ) {
for(conn=circ->p_streams; conn; conn=conn->next_stream) {
connection_send_destroy(circ->p_aci, conn);
}
- if(options.APPort && youngest == circ) { /* check this after we've sent the destroys, to reduce races */
+ if(options.SocksPort && youngest == circ) { /* check this after we've sent the destroys, to reduce races */
/* our current circuit just died. Launch another one pronto. */
log_fn(LOG_INFO,"Youngest circuit dying. Launching a replacement.");
circuit_launch_new(1);
@@ -616,7 +616,7 @@ void circuit_expire_unused_circuits(void) {
void circuit_launch_new(int failure_status) {
static int failures=0;
- if(!options.APPort) /* we're not an application proxy. no need for circuits. */
+ if(!options.SocksPort) /* we're not an application proxy. no need for circuits. */
return;
if(failure_status == -1) { /* I was called because a circuit succeeded */
diff --git a/src/or/config.c b/src/or/config.c
index c1733905e..8bc0e17ff 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -131,6 +131,7 @@ static int config_compare(struct config_line *c, char *key, int type, void *arg)
*(int *)arg = i;
break;
case CONFIG_TYPE_STRING:
+ tor_free(*(char **)arg);
*(char **)arg = tor_strdup(c->value);
break;
case CONFIG_TYPE_DOUBLE:
@@ -159,10 +160,12 @@ static void config_assign(or_options_t *options, struct config_line *list) {
config_compare(list, "Nickname", CONFIG_TYPE_STRING, &options->Nickname) ||
config_compare(list, "Address", CONFIG_TYPE_STRING, &options->Address) ||
config_compare(list, "ExitPolicy", CONFIG_TYPE_STRING, &options->ExitPolicy) ||
+ config_compare(list, "SocksBindAddress",CONFIG_TYPE_STRING,&options->SocksBindAddress) ||
+ config_compare(list, "ORBindAddress", CONFIG_TYPE_STRING, &options->ORBindAddress) ||
/* int options */
config_compare(list, "MaxConn", CONFIG_TYPE_INT, &options->MaxConn) ||
- config_compare(list, "APPort", CONFIG_TYPE_INT, &options->APPort) ||
+ config_compare(list, "SocksPort", CONFIG_TYPE_INT, &options->SocksPort) ||
config_compare(list, "ORPort", CONFIG_TYPE_INT, &options->ORPort) ||
config_compare(list, "DirPort", CONFIG_TYPE_INT, &options->DirPort) ||
config_compare(list, "DirFetchPostPeriod",CONFIG_TYPE_INT, &options->DirFetchPostPeriod) ||
@@ -195,20 +198,27 @@ void print_usage(void) {
}
-/* return 0 if success, <0 if failure. */
-int getconfig(int argc, char **argv, or_options_t *options) {
- struct config_line *cl;
- FILE *cf;
- char *fname;
- int i;
- int result = 0;
+void free_options(or_options_t *options) {
+ tor_free(options->LogLevel);
+ tor_free(options->LogFile);
+ tor_free(options->DebugLogFile);
+ tor_free(options->DataDirectory);
+ tor_free(options->RouterFile);
+ tor_free(options->Nickname);
+ tor_free(options->Address);
+ tor_free(options->PidFile);
+ tor_free(options->ExitPolicy);
+}
+void init_options(or_options_t *options) {
/* give reasonable values for each option. Defaults to zero. */
memset(options,0,sizeof(or_options_t));
- options->LogLevel = "info";
- options->ExitPolicy = "reject 127.0.0.1:*,reject 18.244.0.188:25,accept *:*";
+ options->LogLevel = tor_strdup("info");
+ options->ExitPolicy = tor_strdup("reject 127.0.0.1:*,reject 18.244.0.188:25,accept *:*");
+ options->SocksBindAddress = tor_strdup("127.0.0.1");
+ options->ORBindAddress = tor_strdup("0.0.0.0");
options->loglevel = LOG_INFO;
- options->PidFile = "tor.pid";
+ options->PidFile = tor_strdup("tor.pid");
options->DataDirectory = NULL;
options->CoinWeight = 0.1;
options->MaxConn = 900;
@@ -218,6 +228,17 @@ int getconfig(int argc, char **argv, or_options_t *options) {
options->NewCircuitPeriod = 60; /* once a minute */
options->TotalBandwidth = 800000; /* at most 800kB/s total sustained incoming */
options->NumCpus = 1;
+}
+
+/* return 0 if success, <0 if failure. */
+int getconfig(int argc, char **argv, or_options_t *options) {
+ struct config_line *cl;
+ FILE *cf;
+ char *fname;
+ int i;
+ int result = 0;
+
+ init_options(options);
if(argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1],"--help"))) {
print_usage();
@@ -295,8 +316,8 @@ int getconfig(int argc, char **argv, or_options_t *options) {
result = -1;
}
- if(options->APPort < 0) {
- log(LOG_WARN,"APPort option can't be negative.");
+ if(options->SocksPort < 0) {
+ log(LOG_WARN,"SocksPort option can't be negative.");
result = -1;
}
@@ -305,7 +326,7 @@ int getconfig(int argc, char **argv, or_options_t *options) {
result = -1;
}
- if(options->APPort > 1 &&
+ if(options->SocksPort > 1 &&
(options->CoinWeight < 0.0 || options->CoinWeight >= 1.0)) {
log(LOG_WARN,"CoinWeight option must be >=0.0 and <1.0.");
result = -1;
diff --git a/src/or/connection.c b/src/or/connection.c
index a7bd89a71..0dcf2b94f 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -100,8 +100,7 @@ void connection_free(connection_t *conn) {
buf_free(conn->inbuf);
buf_free(conn->outbuf);
}
- if(conn->address)
- free(conn->address);
+ tor_free(conn->address);
if(connection_speaks_cells(conn)) {
directory_set_dirty();
@@ -115,8 +114,7 @@ void connection_free(connection_t *conn) {
crypto_free_pk_env(conn->link_pkey);
if (conn->identity_pkey)
crypto_free_pk_env(conn->identity_pkey);
- if (conn->nickname)
- free(conn->nickname);
+ tor_free(conn->nickname);
if(conn->s >= 0) {
log_fn(LOG_INFO,"closing fd %d.",conn->s);
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index bdaf16e23..ebc24c495 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -85,8 +85,7 @@ void connection_or_init_conn_from_router(connection_t *conn, routerinfo_t *route
conn->link_pkey = crypto_pk_dup_key(router->link_pkey);
conn->identity_pkey = crypto_pk_dup_key(router->identity_pkey);
conn->nickname = tor_strdup(router->nickname);
- if(conn->address)
- free(conn->address);
+ tor_free(conn->address);
conn->address = tor_strdup(router->address);
}
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 14219beb1..cd6b02e0e 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -165,10 +165,8 @@ static int n_descriptors = 0;
static void free_descriptor_entry(descriptor_entry_t *desc)
{
- if (desc->descriptor)
- free(desc->descriptor);
- if (desc->nickname)
- free(desc->nickname);
+ tor_free(desc->descriptor);
+ tor_free(desc->nickname);
free(desc);
}
@@ -218,7 +216,7 @@ dirserv_add_descriptor(const char **desc)
log(LOG_WARN, "Couldn't parse descriptor");
goto err;
}
- free(desc_tmp); desc_tmp = NULL;
+ tor_free(desc_tmp);
/* Okay. Now check whether the fingerprint is recognized. */
if (!dirserv_router_fingerprint_is_known(ri)) {
log(LOG_WARN, "Identity is unrecognized for descriptor");
@@ -238,7 +236,7 @@ dirserv_add_descriptor(const char **desc)
/* We already have a newer descriptor */
log_fn(LOG_INFO,"We already have a newer desc for nickname %s. Not adding.",ri->nickname);
/* This isn't really an error; return. */
- if (desc_tmp) free(desc_tmp);
+ tor_free(desc_tmp);
if (ri) routerinfo_free(ri);
*desc = end;
return 0;
@@ -263,8 +261,7 @@ dirserv_add_descriptor(const char **desc)
routerinfo_free(ri);
return 0;
err:
- if (desc_tmp)
- free(desc_tmp);
+ tor_free(desc_tmp);
if (ri)
routerinfo_free(ri);
@@ -417,8 +414,7 @@ size_t dirserv_get_directory(const char **directory)
free(new_directory);
return 0;
}
- if (the_directory)
- free(the_directory);
+ tor_free(the_directory);
the_directory = new_directory;
the_directory_len = strlen(the_directory);
log_fn(LOG_INFO,"New directory (size %d):\n%s",the_directory_len,
diff --git a/src/or/main.c b/src/or/main.c
index 441944389..a7bd83adf 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -337,7 +337,7 @@ static void run_scheduled_events(time_t now) {
/* 2. Every NewCircuitPeriod seconds, we expire old circuits and make a
* new one as needed.
*/
- if(options.APPort && time_to_new_circuit < now) {
+ if(options.SocksPort && time_to_new_circuit < now) {
circuit_expire_unused_circuits();
circuit_launch_new(-1); /* tell it to forget about previous failures */
circ = circuit_get_newest_open();
@@ -595,7 +595,7 @@ static int do_main_loop(void) {
* and start the listeners.
*/
retry_all_connections((uint16_t) options.ORPort,
- (uint16_t) options.APPort,
+ (uint16_t) options.SocksPort,
(uint16_t) options.DirPort);
for(;;) {
diff --git a/src/or/onion.c b/src/or/onion.c
index f0bf9aacc..90963a97a 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -222,7 +222,7 @@ static unsigned int *new_route(double cw, routerinfo_t **rarray, int rarray_len,
for(i=0;i<*routelen;i++) {
// log_fn(LOG_DEBUG,"Choosing hop %u.",i);
if (CRYPTO_PSEUDO_RAND_INT(choice)) {
- free((void *)route);
+ free(route);
return NULL;
}
@@ -432,7 +432,7 @@ onion_skin_create(crypto_pk_env_t *dest_router_key,
return 0;
err:
- if (pubkey) free(pubkey);
+ tor_free(pubkey);
if (dh) crypto_dh_free(dh);
if (cipher) crypto_free_cipher_env(cipher);
return -1;
diff --git a/src/or/or.h b/src/or/or.h
index 45631e272..85ce9092b 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -335,7 +335,7 @@ typedef struct {
uint32_t addr; /* all host order */
uint16_t or_port;
- uint16_t ap_port;
+ uint16_t socks_port;
uint16_t dir_port;
time_t published_on;
@@ -426,9 +426,11 @@ typedef struct {
char *Address;
char *PidFile;
char *ExitPolicy;
+ char *SocksBindAddress;
+ char *ORBindAddress;
double CoinWeight;
int ORPort;
- int APPort;
+ int SocksPort;
int DirPort;
int MaxConn;
int OnionRouter;
diff --git a/src/or/routers.c b/src/or/routers.c
index 5acaa4300..daf70b5b7 100644
--- a/src/or/routers.c
+++ b/src/or/routers.c
@@ -144,10 +144,8 @@ void routerinfo_free(routerinfo_t *router)
if (!router)
return;
- if (router->address)
- free(router->address);
- if (router->nickname)
- free(router->nickname);
+ tor_free(router->address);
+ tor_free(router->nickname);
if (router->onion_pkey)
crypto_free_pk_env(router->onion_pkey);
if (router->link_pkey)
@@ -157,9 +155,9 @@ void routerinfo_free(routerinfo_t *router)
while (router->exit_policy) {
e = router->exit_policy;
router->exit_policy = e->next;
- if (e->string) free(e->string);
- if (e->address) free(e->address);
- if (e->port) free(e->port);
+ tor_free(e->string);
+ tor_free(e->address);
+ tor_free(e->port);
free(e);
}
free(router);
@@ -170,10 +168,8 @@ void directory_free(directory_t *dir)
int i;
for (i = 0; i < dir->n_routers; ++i)
routerinfo_free(dir->routers[i]);
- if (dir->routers)
- free(dir->routers);
- if(dir->software_versions)
- free(dir->software_versions);
+ tor_free(dir->routers);
+ tor_free(dir->software_versions);
free(dir);
}
@@ -825,8 +821,8 @@ routerinfo_t *router_get_entry_from_string(char**s) {
goto err;
}
- /* Router->ap_port */
- router->ap_port = atoi(ARGS[3]);
+ /* Router->socks_port */
+ router->socks_port = atoi(ARGS[3]);
/* Router->dir_port */
router->dir_port = atoi(ARGS[4]);
@@ -838,8 +834,8 @@ routerinfo_t *router_get_entry_from_string(char**s) {
goto err;
}
- 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);
+ log_fn(LOG_DEBUG,"or_port %d, socks_port %d, dir_port %d, bandwidth %d.",
+ router->or_port, router->socks_port, router->dir_port, router->bandwidth);
/* XXX Later, require platform before published. */
NEXT_TOKEN();
@@ -1039,12 +1035,9 @@ static int router_add_exit_policy(routerinfo_t *router,
policy_read_failed:
assert(newe->string);
log_fn(LOG_WARN,"Couldn't parse line '%s'. Dropping", newe->string);
- if(newe->string)
- free(newe->string);
- if(newe->address)
- free(newe->address);
- if(newe->port)
- free(newe->port);
+ tor_free(newe->string);
+ tor_free(newe->address);
+ tor_free(newe->port);
free(newe);
return -1;
}
@@ -1121,7 +1114,7 @@ int router_rebuild_descriptor(void) {
ri->nickname = tor_strdup(options.Nickname);
/* No need to set addr. */
ri->or_port = options.ORPort;
- ri->ap_port = options.APPort;
+ ri->socks_port = options.SocksPort;
ri->dir_port = options.DirPort;
ri->published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key());
@@ -1202,7 +1195,7 @@ int router_dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
router->nickname,
router->address,
router->or_port,
- router->ap_port,
+ router->socks_port,
router->dir_port,
router->bandwidth,
platform,
diff --git a/src/or/test.c b/src/or/test.c
index 7d692c1f3..1d3c551b1 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -517,7 +517,7 @@ test_dir_format()
r1.addr = 0xc0a80001u; /* 192.168.0.1 */
r1.published_on = 0;
r1.or_port = 9000;
- r1.ap_port = 9002;
+ r1.socks_port = 9002;
r1.dir_port = 9003;
r1.onion_pkey = pk1;
r1.identity_pkey = pk2;
@@ -539,7 +539,7 @@ test_dir_format()
r2.addr = 0x0a030201u; /* 10.3.2.1 */
r2.published_on = 5;
r2.or_port = 9005;
- r2.ap_port = 0;
+ r2.socks_port = 0;
r2.dir_port = 0;
r2.onion_pkey = pk2;
r2.identity_pkey = pk1;
@@ -580,7 +580,7 @@ test_dir_format()
test_assert(rp1);
test_streq(rp1->address, r1.address);
test_eq(rp1->or_port, r1.or_port);
- test_eq(rp1->ap_port, r1.ap_port);
+ test_eq(rp1->socks_port, r1.socks_port);
test_eq(rp1->dir_port, r1.dir_port);
test_eq(rp1->bandwidth, r1.bandwidth);
test_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
@@ -603,7 +603,7 @@ test_dir_format()
test_assert(rp2);
test_streq(rp2->address, r2.address);
test_eq(rp2->or_port, r2.or_port);
- test_eq(rp2->ap_port, r2.ap_port);
+ test_eq(rp2->socks_port, r2.socks_port);
test_eq(rp2->dir_port, r2.dir_port);
test_eq(rp2->bandwidth, r2.bandwidth);
test_assert(crypto_pk_cmp_keys(rp2->onion_pkey, pk2) == 0);
@@ -636,14 +636,14 @@ test_dir_format()
test_eq(2, dir2->n_routers);
#endif
- if (pk1_str) free(pk1_str);
- if (pk2_str) free(pk2_str);
+ tor_free(pk1_str);
+ tor_free(pk2_str);
if (pk1) crypto_free_pk_env(pk1);
if (pk2) crypto_free_pk_env(pk2);
if (rp1) routerinfo_free(rp1);
if (rp2) routerinfo_free(rp2);
- if (dir1) free(dir1); /* And more !*/
- if (dir1) free(dir2); /* And more !*/
+ tor_free(dir1); /* And more !*/
+ tor_free(dir2); /* And more !*/
/* make sure compare_recommended_versions() works */
test_eq(0, compare_recommended_versions("abc", "abc"));