[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [tor/master 17/38] Add bufferevent support for outgoing connections; exits are now supported.
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Tue, 11 Aug 2009 15:03:43 -0400
Subject: Add bufferevent support for outgoing connections; exits are now supported.
Commit: b63f6518cbdc4c80b09399bc17d3bec3cac76ad9
---
src/or/connection.c | 4 +++-
src/or/main.c | 11 +++++++++--
src/or/main.h | 4 +++-
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/or/connection.c b/src/or/connection.c
index e6b4bc3..394aa3b 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -192,6 +192,8 @@ connection_type_uses_bufferevent(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_AP:
return 1;
+ case CONN_TYPE_EXIT:
+ return 1;
default:
return 0;
}
@@ -1342,7 +1344,7 @@ connection_connect(connection_t *conn, const char *address,
escaped_safe_str_client(address),
port, inprogress?"in progress":"established", s);
conn->s = s;
- if (connection_add(conn) < 0) /* no space, forget it */
+ if (connection_add_connecting(conn) < 0) /* no space, forget it */
return -1;
return inprogress ? 0 : 1;
}
diff --git a/src/or/main.c b/src/or/main.c
index 18473c3..976d805 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)) {
diff --git a/src/or/main.h b/src/or/main.h
index 6175c28..10b8aad 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -14,7 +14,9 @@
extern int can_complete_circuit;
-int connection_add(connection_t *conn);
+int connection_add_impl(connection_t *conn, int is_connecting);
+#define connection_add(conn) connection_add_impl((conn), 0)
+#define connection_add_connecting(conn) connection_add_impl((conn), 1)
int connection_remove(connection_t *conn);
void connection_unregister_events(connection_t *conn);
int connection_in_array(connection_t *conn);
--
1.7.1