doxygen:
doxygen && cd doc/doxygen/latex && make
+
+# Avoid strlcpy.c, strlcat.c, tree.h
+check-spaces:
+ ./contrib/checkSpace.pl \
+ src/common/*.h \
+ src/common/[^s]*.c \
+ src/or/[^t]*.[ch] src/or/t*.c
+
--- /dev/null
+#!/usr/bin/perl -w
+
+for $fn (@ARGV) {
+ open(F, "$fn");
+ $lastnil = 0;
+ while (<F>) {
+ if (/\r/) {
+ print " CR:$fn:$.\n";
+ }
+ if (/\t/) {
+ print " TAB:$fn:$.\n";
+ }
+ if (/ +$/) {
+ print "Space\@EOL:$fn:$.\n";
+ }
+ if ($lastnil && /^$/) {
+ print " DoubleNL:$fn:$.\n";
+ } elsif (/^$/) {
+ $lastnil = 1;
+ } else {
+ $lastnil = 0;
+ }
+ }
+ close(F);
+}
/* See LICENSE for licensing information */
/* $Id$ */
-
/* This is required on rh7 to make strptime not complain.
*/
#define _GNU_SOURCE
#endif
}
-
/** Set *timeval to the current time of day. On error, log and terminate.
* (Same as gettimeofday(timeval,NULL), but never returns -1.)
*/
}
#endif
-
/**
* On Windows, WSAEWOULDBLOCK is not always correct: when you see it,
* you need to ask the socket for its actual errno. Also, you need to
EVP_PKEY *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env, int private);
DH *_crypto_dh_env_get_dh(crypto_dh_env_t *dh);
-
/** Return the number of bytes added by padding method <b>padding</b>.
*/
static INLINE int
return crypto_pk_private_sign(env,to,digest,DIGEST_LEN);
}
-
/** Perform a hybrid (public/secret) encryption on <b>fromlen</b>
* bytes of data from <b>from</b>, with padding type 'padding',
* storing the results on <b>to</b>.
else
n += r;
}
-
+
r = tor_vsnprintf(buf+n,buf_len-n,format,ap);
if(r < 0) {
n = buf_len-2;
return min;
}
-
/*
Local Variables:
mode:c
/* XXXX Note: The code was originally written to refer to severities,
* with 0 being the least severe; while syslog's logging code refers to
* priorities, with 0 being the most important. Thus, all our comparisons
- * needed to be reversed when we added syslog support.
+ * needed to be reversed when we added syslog support.
*
* The upshot of this is that comments about log levels may be messed
* up: for "maximum severity" read "most severe" and "numerically
#endif
#endif
-
#if (SIZEOF_INT8_T != 0)
#define HAVE_INT8_T
#endif
#endif
#endif
-
#if (SIZEOF_INT == 2)
#ifndef HAVE_INT16_T
typedef signed int int16_t;
#endif
#endif
-
#if (SIZEOF_LONG == 4)
#ifndef HAVE_INT32_T
typedef signed long int32_t;
return x509;
}
-
#ifdef EVERYONE_HAS_AES
/* Everybody is running OpenSSL 0.9.7 or later, so no backward compatibility
* is needed. */
return strncmp(s1+(n1-n2), s2, n2);
}
-
/** Return a pointer to the first char of s that is not whitespace and
* not a comment, or to the terminating NUL if no such character exists.
*/
err: \
if (ok) *ok = 0; \
if (next) *next = endptr; \
- return 0; \
-
+ return 0;
/** Extract a long from the start of s, in the given numeric base. If
* there is unconverted data and next is provided, set *next to the
CHECK_STRTOX_RESULT();
}
-
-
void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen)
{
const char *end;
return 0;
}
-
/* =====
* Time
* ===== */
a->tv_usec %= 1000000;
}
-
#define IS_LEAPYEAR(y) (!(y % 4) && ((y % 100) || !(y % 400)))
static int n_leapdays(int y1, int y2) {
--y1;
write_str_to_file(const char *fname, const char *str, int bin)
{
#ifdef MS_WINDOWS
- if (strchr(str, '\r')) {
- log_fn(LOG_WARN, "How odd. Writing a string that does contain CR already.");
+ if (!bin && strchr(str, '\r')) {
+ log_fn(LOG_WARN,
+ "How odd. Writing a string that does contain CR already.");
}
#endif
return write_bytes_to_file(fname, str, strlen(str), bin);
return NULL;
}
string[r] = '\0'; /* NUL-terminate the result. */
-
+
if (bin && r != statbuf.st_size) {
/* If we're in binary mode, then we'd better have an exact match for
* size. Otherwise, win32 encoding may throw us off, and that's okay. */
#ifdef MS_WINDOWS
if (!bin && strchr(string, '\r')) {
log_fn(LOG_DEBUG, "We didn't convert CRLF to LF as well as we hoped when reading %s. Coping.",
- filename);
+ filename);
tor_strstrip(string, "\r");
}
#endif
}
}
-/** Set <b>options</b>->DirServers to contain the default directory
+/** Set <b>options</b>->DirServers to contain the default directory
* servers. */
static void
add_default_trusted_dirservers(or_options_t *options)
return r;
}
-
/** Read a configuration file into <b>options</b>, finding the configuration
* file location based on the command line. After loading the options,
* validate them for consistency, then take actions based on them.
return r;
}
-
/** Adjust or the value of options->DataDirectory, or fill it in if it's
* absent. Return 0 on success, -1 on failure. */
static int
return 0;
}
-
/*
Local Variables:
mode:c
return 0;
}
/* else there was a real error. */
- log_fn(LOG_WARN,"accept() failed: %s. Closing listener.",
+ log_fn(LOG_WARN,"accept() failed: %s. Closing listener.",
tor_socket_strerror(e));
connection_mark_for_close(conn);
return -1;
}
}
-/**
+/**
* Launch any configured listener connections of type <b>type</b>. (A
* listener is configured if <b>port_option</b> is non-zero. If any
* BindAddress configuration options are given in <b>cfg</b>, create a
* connection binding to the address <b>default_addr</b>.)
*
* If <b>force</b> is true, close and re-open all listener connections.
- * Otherwise, only relaunch the listeners of this type if the number of
+ * Otherwise, only relaunch the listeners of this type if the number of
* existing connections is not as configured (e.g., because one died).
*/
static int retry_listeners(int type, struct config_line_t *cfg,
tor_assert(conn->type == CONN_TYPE_EXIT);
tor_assert(conn->state == EXIT_CONN_STATE_CONNECTING);
-
log_fn(LOG_INFO,"Exit connection to %s:%u established.",
conn->address,conn->port);
assert_circuit_ok(circ);
relay_header_unpack(&rh, cell->payload);
-
/* This 'dummy_conn' only exists to remember the stream ID
* associated with the resolve request; and to make the
* implementation of dns.c more uniform. (We really only need to
/* send it off to the gethostbyname farm */
switch(dns_resolve(dummy_conn)) {
case 1: /* The result was cached; a resolved cell was sent. */
- case -1:
+ case -1:
circuit_detach_stream(circuit_get_by_conn(dummy_conn), dummy_conn);
connection_free(dummy_conn);
return 0;
strmap_foreach(client_dns_map, (strmap_foreach_fn)_remove_if_expired, &now);
}
-
/** Make connection redirection follow the provided list of
* exit_redirect_t */
void
log_fn(LOG_WARN,"No running dirservers known. Not trying. (purpose %d)", purpose);
}
-
/** Launch a new connection to the directory server <b>router</b> to upload or
* download a service or rendezvous descriptor. <b>purpose</b> determines what
* kind of directory connection we're launching, and must be one of
return 0;
}
- log_fn(LOG_DEBUG,"Dumping %sdirectory to client.",
+ log_fn(LOG_DEBUG,"Dumping %sdirectory to client.",
deflated?"deflated ":"");
format_rfc1123_time(date, time(NULL));
tor_snprintf(tmp, sizeof(tmp), "HTTP/1.0 200 OK\r\nDate: %s\r\nContent-Length: %d\r\nContent-Type: text/plain\r\nContent-Encoding: %s\r\n\r\n",
nickname, fingerprint);
continue;
}
- if (0==strcasecmp(ent->nickname, DEFAULT_CLIENT_NICKNAME)) {
+ if (0==strcasecmp(nickname, DEFAULT_CLIENT_NICKNAME)) {
/* If you approved an OR called "client", then clients who use
* the default nickname could all be rejected. That's no good. */
log(LOG_WARN,
/**
* Allocate and return a description of the status of the server <b>desc</b>,
* for use in a running-routers line (if <b>rr_format</b> is true), or in a
- * router-status line (if <b>rr_format</b> is false. The server is listed
+ * router-status line (if <b>rr_format</b> is false. The server is listed
* as running iff <b>is_live</b> is true.
*/
static char *
struct config_line_t *ln;
versions = smartlist_create();
for (ln = get_options()->RecommendedVersions; ln; ln = ln->next) {
- smartlist_split_string(versions, ln->value, ",",
+ smartlist_split_string(versions, ln->value, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
}
recommended_versions = smartlist_join_strings(versions,",",0,NULL);
SMARTLIST_FOREACH(versions,char *,s,tor_free(s));
smartlist_free(versions);
}
-
+
dirserv_remove_old_servers(ROUTER_MAX_AGE);
published_on = time(NULL);
format_iso_time(published, published_on);
return tor_timegm(tm);
}
-
/** Return the start of the accounting period that comes after the one
* containing the time <b>now</b>. */
static time_t
return tor_timegm(tm);
}
-
/** Initialize the accounting subsystem. */
void
configure_accounting(time_t now)
}
}
-
/** Perform regular maintenance tasks for a single connection. This
* function gets run once per second per connection by run_housekeeping.
*/
*/
connection_ap_expire_beginning();
-
/** 3c. And expire connections that we've held open for too long.
*/
connection_expire_held_open();
#endif /* signal stuff */
}
-
/** Main entry point for the Tor command-line client.
*/
static int tor_init(int argc, char *argv[]) {
#include <time.h>
#endif
-
#ifdef MS_WINDOWS
#if (_MSC_VER <= 1300)
#include <winsock.h>
int failure_count;
} cpath_build_state_t;
-
#define CIRCUIT_MAGIC 0x35315243u
/** Struct for a path (circuit) through the onion routing network. */
struct circuit_t {
void add_trusted_dir_server(const char *addr, uint16_t port,const char *digest);
void clear_trusted_dir_servers(void);
-
/********************************* routerparse.c ************************/
typedef struct tor_version_t {
if(connection_ap_can_use_exit(conn, exitrouter)) {
log_fn(LOG_WARN,"Exitrouter %s seems to be more restrictive than its exit policy. Not using this router as exit for now,", exitrouter->nickname);
exit_policy_free(exitrouter->exit_policy);
- exitrouter->exit_policy =
- router_parse_exit_policy_from_string("reject *:*");
+ exitrouter->exit_policy =
+ router_parse_exit_policy_from_string("reject *:*");
}
conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
return 0;
}
-
/** If we are not currently fetching a rendezvous service descriptor
* for the service ID <b>query</b>, start a directory connection to fetch a
* new one.
#include "or.h"
-
/** Return 0 if one and two are the same service ids, else -1 or 1 */
int rend_cmp_service_ids(const char *one, const char *two) {
return strcasecmp(one,two);
circ->purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
memcpy(circ->rend_cookie, request, REND_COOKIE_LEN);
-
base16_encode(hexid,9,request,4);
log_fn(LOG_INFO, "Established rendezvous point on circuit %d for cookie %s",
name2 = "(unknown)";
link_history = (link_history_t*) link_history_p;
-
+
ret = tor_snprintf(buffer+len, 2048-len, "%s(%ld/%ld); ", name2,
link_history->n_extend_ok,
link_history->n_extend_ok+link_history->n_extend_fail);
return buf;
}
-
/*
Local Variables:
mode:c
return len == HEX_DIGEST_LEN+1 && strspn(s+1,HEX_CHARACTERS)==len-1;
}
-
/*
Local Variables:
mode:c
});
});
-
for (cl = get_options()->NodeFamilies; cl; cl = cl->next) {
if (router_nickname_is_in_list(router, cl->value)) {
add_nickname_list_to_smartlist(sl, cl->value, 0);
* Code to parse router descriptors and directories.
*/
-
/** Add to the current routerlist each router stored in the
* signed directory <b>s</b>. If pkey is provided, check the signature against
* pkey; else check against the pkey of the signing directory server. */
all_routers = smartlist_create();
if(me) /* learn if the dirservers think I'm verified */
smartlist_add(all_routers, me);
-
+
smartlist_add_all(all_routers,list->routers);
SMARTLIST_FOREACH(rr->running_routers, const char *, cp,
routers_update_status_from_entry(all_routers, rr->published_on,
* (running-routers format)
* <li> !<b>nickname</b> -- router is not-running and verified.
* (running-routers format)
- * <li> <b>nickname</b>=$<b>hexdigest</b> -- router is running and
+ * <li> <b>nickname</b>=$<b>hexdigest</b> -- router is running and
* verified. (router-status format)
* (router-status format)
- * <li> !<b>nickname</b>=$<b>hexdigest</b> -- router is running and
+ * <li> !<b>nickname</b>=$<b>hexdigest</b> -- router is running and
* verified. (router-status format)
* <li> !<b>nickname</b> -- router is not-running and verified.
* <li> $<b>hexdigest</b> -- router is running and unverified.
* router. */
str = end;
if (router_parse_list_from_string(&str, &new_dir,
- good_nickname_list,
+ good_nickname_list,
tok->tp==K_RUNNING_ROUTERS,
published_on)) {
log_fn(LOG_WARN, "Error reading routers from directory");
return 0;
}
-
/** Helper function: reads a single router entry from *<b>s</b> ...
* *<b>end</b>. Mallocs a new router and returns it if all goes well, else
* returns NULL.
log_fn(LOG_WARN,"Error in exit policy"); goto err;}
);
-
if ((tok = find_first_by_keyword(tokens, K_FAMILY)) && tok->n_args) {
int i;
router->declared_family = smartlist_create();
smartlist_add(router->declared_family, tor_strdup(tok->args[i]));
}
}
-
+
if (!(tok = find_first_by_keyword(tokens, K_ROUTER_SIGNATURE))) {
log_fn(LOG_WARN, "Missing router signature"); goto err;
}
router->or_port, router->socks_port, router->dir_port,
(unsigned) router->bandwidthrate, (unsigned) router->bandwidthburst);
-
goto done;
return router;
return 0;
}
-
static int router_add_exit_policy(routerinfo_t *router,directory_token_t *tok)
{
struct exit_policy_t *newe, **tmpe;
if (parse_addr_and_port_range(arg, &newe->addr, &newe->msk,
&newe->prt_min, &newe->prt_max))
goto policy_read_failed;
-
in.s_addr = htonl(newe->addr);
address = tor_strdup(inet_ntoa(in));
fputs("\n",stdout);
#endif
-
return tok;
#undef RET_ERR
}
test_eq(2, smartlist_len(sl));
test_streq("efgh", smartlist_get(sl, 1));
-
/* Test tor_strstrip() */
strcpy(buf, "Testing 1 2 3");
test_eq(0, tor_strstrip(buf, ",!"));
tor_free(buf1);
}
-static void *
+static void *
_squareAndRemoveK4(const char *key, void*val, void *data)
{
int *ip = (int*)data;
strmap_free(map,NULL);
}
-static void
+static void
test_onion(void)
{
#if 0
crypto_free_pk_env(pk);
}
-
static void
test_dir_format(void)
{
do { log_fn(LOG_ERR, "Error while %s: %s", act, \
tor_socket_strerror(tor_socket_errno(_s))); } while(0)
-static int
+static int
build_socks4a_resolve_request(char **out,
const char *username,
const char *hostname)
return len;
}
-static int
+static int
parse_socks4a_resolve_response(const char *response, size_t len,
uint32_t *addr_out)
{
return 0;
}
-static int
+static int
do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
uint32_t *result_addr)
{
return 0;
}
-static void
+static void
usage(void)
{
puts("Syntax: tor-resolve [-v] hostname [sockshost:socksport]");