summaryrefslogtreecommitdiff
path: root/src/or/main.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-08-11 15:03:43 -0400
committerNick Mathewson <nickm@torproject.org>2010-09-27 12:31:13 -0400
commitb63f6518cbdc4c80b09399bc17d3bec3cac76ad9 (patch)
tree5e280f817c5f077a00682ae0f0d5be9cb55cd37d /src/or/main.c
parentddcb59bb70457e203247931aaad3a3ff8b923f97 (diff)
downloadtor-b63f6518cbdc4c80b09399bc17d3bec3cac76ad9.tar.gz
tor-b63f6518cbdc4c80b09399bc17d3bec3cac76ad9.zip
Add bufferevent support for outgoing connections; exits are now supported.
Diffstat (limited to 'src/or/main.c')
-rw-r--r--src/or/main.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/or/main.c b/src/or/main.c
index 18473c3b50..976d805e13 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -160,7 +160,7 @@ int can_complete_circuit=0;
* non-reading and non-writing.
*/
int
-connection_add(connection_t *conn)
+connection_add_impl(connection_t *conn, int is_connecting)
{
tor_assert(conn);
tor_assert(conn->s >= 0 ||
@@ -179,7 +179,7 @@ connection_add(connection_t *conn)
tor_libevent_get_base(),
conn->s,
BEV_OPT_DEFER_CALLBACKS);
- if (conn->inbuf) {
+ if (conn->inbuf) {
/* XXX Instead we should assert that there is no inbuf, once we
* have linked connections using bufferevents. */
tor_assert(conn->outbuf);
@@ -189,8 +189,15 @@ connection_add(connection_t *conn)
buf_free(conn->outbuf);
conn->inbuf = conn->outbuf = NULL;
}
+ if (is_connecting) {
+ /* Put the bufferevent into a "connecting" state so that we'll get
+ * a "connected" event callback on successful write. */
+ bufferevent_socket_connect(conn->bufev, NULL, 0);
+ }
connection_configure_bufferevent_callbacks(conn);
}
+#else
+ (void) is_connecting;
#endif
if (!HAS_BUFFEREVENT(conn) && (conn->s >= 0 || conn->linked)) {