aboutsummaryrefslogtreecommitdiff
path: root/src/or/relay.c
Commit message (Expand)AuthorAge
* All-in-one benchmark test for cell cryptoNick Mathewson2011-11-11
* Merge remote-tracking branch 'origin/maint-0.2.2'•••Conflicts: configure.in src/or/circuitbuild.c Nick Mathewson2011-09-09
|\
| * Use %f with printf-style formatting, not %lf•••For printf, %f and %lf are synonymous, since floats are promoted to doubles when passed as varargs. It's only for scanf that we need to say "%lf" for doubles and "%f" for floats. Apparenly, some older compilers think it's naughty to say %lf and like to spew warnings about it. Found by grarpamp. Nick Mathewson2011-08-30
* | Fix whitespace issues in patches merged today so farNick Mathewson2011-09-07
* | Move entry-only fields from edge_connection_t to entry_connection_t•••Also, refactor the code accordingly. Nick Mathewson2011-07-21
* | Remember optimistically sent data until we have gotten a CONNECTED•••Since we can retry failed streams under some circumstances, we need to be ready to send data queued on them. Nick Mathewson2011-07-18
* | Don't shadow parameters with local variables•••This is a little error-prone when the local has a different type from the parameter, and is very error-prone with both have the same type. Let's not do this. Fixes CID #437,438,439,440,441. Nick Mathewson2011-07-01
* | Make the get_options() return const•••This lets us make a lot of other stuff const, allows the compiler to generate (slightly) better code, and will make me get slightly fewer patches from folks who stick mutable stuff into or_options_t. const: because not every input is an output! Nick Mathewson2011-06-14
* | Merge remote-tracking branch 'origin/maint-0.2.2'•••The conflicts were mainly caused by the routerinfo->node transition. Conflicts: src/or/circuitbuild.c src/or/command.c src/or/connection_edge.c src/or/directory.c src/or/dirserv.c src/or/relay.c src/or/rendservice.c src/or/routerlist.c Nick Mathewson2011-05-30
|\|
| * Log descriptions of nodes, not just nicknames.•••This patch introduces a few new functions in router.c to produce a more helpful description of a node than its nickame, and then tweaks nearly all log messages taking a nickname as an argument to call these functions instead. There are a few cases where I left the old log messages alone: in these cases, the nickname was that of an authority (whose nicknames are useful and unique), or the message already included an identity and/or an address. I might have missed a couple more too. This is a fix for bug 3045. Nick Mathewson2011-05-15
* | Merge remote-tracking branch 'public/bug3122_memcmp_022' into bug3122_memcmp_023•••Conflicts in various places, mainly node-related. Resolved them in favor of HEAD, with copying of tor_mem* operations from bug3122_memcmp_022. src/common/Makefile.am src/or/circuitlist.c src/or/connection_edge.c src/or/directory.c src/or/microdesc.c src/or/networkstatus.c src/or/router.c src/or/routerlist.c src/test/test_util.c Nick Mathewson2011-05-11
|\|
| * Merge remote-tracking branch 'public/3122_memcmp_squashed' into bug3122_memcm...•••Conflicts throughout. All resolved in favor of taking HEAD and adding tor_mem* or fast_mem* ops as appropriate. src/common/Makefile.am src/or/circuitbuild.c src/or/directory.c src/or/dirserv.c src/or/dirvote.c src/or/networkstatus.c src/or/rendclient.c src/or/rendservice.c src/or/router.c src/or/routerlist.c src/or/routerparse.c src/or/test.c Nick Mathewson2011-05-11
| |\
| | * Hand-conversion and audit phase of memcmp transition•••Here I looked at the results of the automated conversion and cleaned them up as follows: If there was a tor_memcmp or tor_memeq that was in fact "safe"[*] I changed it to a fast_memcmp or fast_memeq. Otherwise if there was a tor_memcmp that could turn into a tor_memneq or tor_memeq, I converted it. This wants close attention. [*] I'm erring on the side of caution here, and leaving some things as tor_memcmp that could in my opinion use the data-dependent fast_memcmp variant. Nick Mathewson2011-05-11
| | * Automated conversion of memcmp to tor_memcmp/tor_mem[n]eq•••This commit is _exactly_ the result of perl -i -pe 's/\bmemcmp\(/tor_memcmp\(/g' src/*/*.[ch] perl -i -pe 's/\!\s*tor_memcmp\(/tor_memeq\(/g' src/*/*.[ch] perl -i -pe 's/0\s*==\s*tor_memcmp\(/tor_memeq\(/g' src/*/*.[ch] perl -i -pe 's/0\s*!=\s*tor_memcmp\(/tor_memneq\(/g' src/*/*.[ch] git checkout src/common/di_ops.[ch] git checkout src/or/test.c git checkout src/common/test.h Nick Mathewson2011-05-11
* | | Merge remote-tracking branch 'origin/maint-0.2.2'•••Conflicts: src/common/address.c src/common/compat_libevent.c src/common/memarea.c src/common/util.h src/or/buffers.c src/or/circuitbuild.c src/or/circuituse.c src/or/connection.c src/or/directory.c src/or/networkstatus.c src/or/or.h src/or/routerlist.c Nick Mathewson2011-04-07
|\| |
| * | Add XXX023s for our timestamp_dirty abuse.Nick Mathewson2011-03-25
* | | Merge remote-tracking branch 'origin/maint-0.2.2'Nick Mathewson2011-03-16
|\| |
| * | Move the decl for tor_gettimofday_cache_clear to the right headerNick Mathewson2011-03-16
* | | Merge remote branch 'arma/optimistic_server'Nick Mathewson2011-03-15
|\ \ \
| * | | whitespace fixes to pass 'make check-spaces'Roger Dingledine2011-03-15
| * | | Revise prop174 patch: make the circuit sendme calls unconditional.•••The circuit_consider_sending_sendme call should be unconditional, since the circuit windows can move independent of the state of streams. Nick Mathewson2011-03-14
| * | | Implement server side of Proposal 174 (optimistic data)•••Ian's original message: The current code actually correctly handles queued data at the Exit; if there is queued data in a EXIT_CONN_STATE_CONNECTING stream, that data will be immediately sent when the connection succeeds. If the connection fails, the data will be correctly ignored and freed. The problem with the current server code is that the server currently drops DATA cells on streams in the EXIT_CONN_STATE_CONNECTING state. Also, if you try to queue data in the EXIT_CONN_STATE_RESOLVING state, bad things happen because streams in that state don't yet have conn->write_event set, and so some existing sanity checks (any stream with queued data is at least potentially writable) are no longer sound. The solution is to simply not drop received DATA cells while in the EXIT_CONN_STATE_CONNECTING state. Also do not send SENDME cells in this state, so that the OP cannot send more than one window's worth of data to be queued at the Exit. Finally, patch the sanity checks so that streams in the EXIT_CONN_STATE_RESOLVING state that have buffered data can pass. [...] Here is a simple patch. It seems to work with both regular streams and hidden services, but there may be other corner cases I'm not aware of. (Do streams used for directory fetches, hidden services, etc. take a different code path?) Ian Goldberg2011-03-14
* | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-03-15
|\ \ \ \ | |/ / / |/| / / | |/ /
| * | Fix comment for connection_edge_consider_sending_sendmeNick Mathewson2011-03-15
* | | Merge branch 'maint-0.2.2'Roger Dingledine2011-01-15
|\| |
| * | Sanity-check consensus param values•••We need to make sure that the worst thing that a weird consensus param can do to us is to break our Tor (and only if the other Tors are reliably broken in the same way) so that the majority of directory authorities can't pull any attacks that are worse than the DoS that they can trigger by simply shutting down. One of these worse things was the cbtnummodes parameter, which could lead to heap corruption on some systems if the value was sufficiently large. This commit fixes this particular issue and also introduces sanity checking for all consensus parameters. Sebastian Hahn2011-01-15
* | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-03
|\| |
| * | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2•••Conflicts: src/common/test.h src/or/test.c Nick Mathewson2011-01-03
| |\|
| | * Bump copyright statements to 2011Nick Mathewson2011-01-03
* | | Merge branch 'maint-0.2.2'Roger Dingledine2010-12-19
|\| |
| * | Merge remote branch fix_security_bug_021 into fix_security_bug_022•••Conflicts: src/common/memarea.c src/or/or.h src/or/rendclient.c Nick Mathewson2010-12-15
| |\|
| | * Make payloads into uint8_t.•••This will avoid some signed/unsigned assignment-related bugs. Nick Mathewson2010-12-15
| | * Backport END_STREAM_REASON_NOROUTE for client use.•••(Partial backport of 150ed553dfce9, 161b275028e90, and 4c948ffd6.) Sebastian Hahn2010-08-18
* | | Merge remote branch 'origin/maint-0.2.2'•••Conflicts: src/or/relay.c Nick Mathewson2010-11-30
|\| |
| * | Revise comment on 2210 a little; clean up n_streams/num_streams confusion•••Also add a changes file Nick Mathewson2010-11-29
| * | Add wrappers function for libc random()•••On windows, it's called something different. Nick Mathewson2010-11-29
| * | Fix whitespace in patch for 2210 and backport to 0.2.2Nick Mathewson2010-11-29
| * | Improve fairness when activating streams in circuit_resume_edge_reading_helper••• The reason the "streams problem" occurs is due to the complicated interaction between Tor's congestion control and libevent. At some point during the experiment, the circuit window is exhausted, which blocks all edge streams. When a circuit level sendme is received at Exit, it resumes edge reading by looping over linked list of edge streams, and calling connection_start_reading() to inform libevent to resume reading. When the streams are activated again, Tor gets the chance to service the first three streams activated before the circuit window is exhausted again, which causes all streams to be blocked again. As an experiment, we reversed the order in which the streams are activated, and indeed the first three streams, rather than the last three, got service, while the others starved. Our solution is to change the order in which streams are activated. We choose a random edge connection from the linked list, and then we activate streams starting from that chosen stream. When we reach the end of the list, then we continue from the head of the list until our chosen stream (treating the linked list as a circular linked list). It would probably be better to actually remember which streams have received service recently, but this way is simple and effective. Mashael AlSabah2010-11-29
* | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2010-10-21
|\| |
| * | Send relay_early cells in rend circs•••There are no relay left that run version 0.2.1.3 through 0.2.1.18, so changing this behaviour should be safe now. Sebastian Hahn2010-10-18
* | | Merge branch 'bug1992_part1'Nick Mathewson2010-10-15
|\ \ \
| * | | refactor all these tor_inet_ntoa idioms•••but don't refactor the ones that look messy Roger Dingledine2010-10-01
* | | | Fix a couple users of buf_datalen that slipped in. Found by SebastianNick Mathewson2010-10-13
* | | | Initial conversion to use node_t throughout our codebase.•••A node_t is an abstraction over routerstatus_t, routerinfo_t, and microdesc_t. It should try to present a consistent interface to all of them. There should be a node_t for a server whenever there is * A routerinfo_t for it in the routerlist * A routerstatus_t in the current_consensus. (note that a microdesc_t alone isn't enough to make a node_t exist, since microdescriptors aren't usable on their own.) There are three ways to get a node_t right now: looking it up by ID, looking it up by nickname, and iterating over the whole list of microdescriptors. All (or nearly all) functions that are supposed to return "a router" -- especially those used in building connections and circuits -- should return a node_t, not a routerinfo_t or a routerstatus_t. A node_t should hold all the *mutable* flags about a node. This patch moves the is_foo flags from routerinfo_t into node_t. The flags in routerstatus_t remain, but they get set from the consensus and should not change. Some other highlights of this patch are: * Looking up routerinfo and routerstatus by nickname is now unified and based on the "look up a node by nickname" function. This tries to look only at the values from current consensus, and not get confused by the routerinfo_t->is_named flag, which could get set for other weird reasons. This changes the behavior of how authorities (when acting as clients) deal with nodes that have been listed by nickname. * I tried not to artificially increase the size of the diff here by moving functions around. As a result, some functions that now operate on nodes are now in the wrong file -- they should get moved to nodelist.c once this refactoring settles down. This moving should happen as part of a patch that moves functions AND NOTHING ELSE. * Some old code is now left around inside #if 0/1 blocks, and should get removed once I've verified that I don't want it sitting around to see how we used to do things. There are still some unimplemented functions: these are flagged with "UNIMPLEMENTED_NODELIST()." I'll work on filling in the implementation here, piece by piece. I wish this patch could have been smaller, but there did not seem to be any piece of it that was independent from the rest. Moving flags forces many functions that once returned routerinfo_t * to return node_t *, which forces their friends to change, and so on. Nick Mathewson2010-10-01
* | | | Try to make most routerinfo_t interfaces constNick Mathewson2010-10-01
|/ / /
* | | Make a function to mark a connection and set hold_open_until_flushed.Nick Mathewson2010-09-27
* | | Refactor users of buf_datalen to bufferevent-friendly version.Nick Mathewson2010-09-27
* | | Teach read_event/write_event manipulators about bufferevents.•••Add an --enable-bufferevents config switch. Nick Mathewson2010-09-27
|/ /
* | I hear we are close to a release. Clean up the whitespace.Nick Mathewson2010-09-16
* | Demote a warn when enabling CellStatistics•••When the CellStatistics option is off, we don't store cell insertion times. Doing so would also not be very smart, because there seem to still be some performance issues with this type of statistics. Nothing harmful happens when we don't have insertion times, so we don't need to alarm the user. Sebastian Hahn2010-09-16