[tor-commits] [stegotorus/master] Major bugfix in steg module initialization.
zwol at torproject.org
zwol at torproject.org
Fri Jul 20 23:17:06 UTC 2012
commit 8323c152091279b2b1e920aeea297e72dfac048a
Author: Zack Weinberg <zackw at panix.com>
Date: Wed Feb 1 21:04:38 2012 -0800
Major bugfix in steg module initialization.
---
src/protocol/chop.cc | 19 ++++++++++++-------
src/steg.cc | 4 ++--
src/steg.h | 2 +-
src/steg/nosteg_rr.cc | 3 ++-
4 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/src/protocol/chop.cc b/src/protocol/chop.cc
index 3aa0efd..5acc010 100644
--- a/src/protocol/chop.cc
+++ b/src/protocol/chop.cc
@@ -799,7 +799,7 @@ chop_find_or_make_circuit(conn_t *conn, uint64_t circuit_id)
ck = out.first->second;
log_debug(conn, "found circuit to %s", ck->up_peer);
} else {
- ck = cfg->circuit_create(0);
+ ck = circuit_create(cfg, 0);
if (!ck) {
log_warn(conn, "failed to create new circuit");
return -1;
@@ -969,6 +969,12 @@ chop_circuit_t::~chop_circuit_t()
chop_reassembly_elt *p, *q, *queue;
chop_circuit_table::iterator out;
+ log_debug(this, "syn%c%c fin%c%c eof%c ds=%lu",
+ sent_syn ? '+' : '-', received_syn ? '+' : '-',
+ sent_fin ? '+' : '-', received_fin ? '+' : '-',
+ upstream_eof ? '+' : '-',
+ (unsigned long)downstreams.size());
+
for (unordered_set<conn_t *>::iterator i = this->downstreams.begin();
i != this->downstreams.end(); i++) {
conn_t *conn = *i;
@@ -1049,7 +1055,8 @@ chop_config_t::conn_create(size_t index)
{
chop_conn_t *conn = new chop_conn_t;
conn->cfg = this;
- conn->steg = steg_new(this->steg_targets.at(index));
+ conn->steg = steg_new(this->steg_targets.at(index),
+ this->mode != LSN_SIMPLE_SERVER);
if (!conn->steg) {
free(conn);
return 0;
@@ -1275,15 +1282,13 @@ chop_conn_t::recv()
int
chop_conn_t::recv_eof()
{
- circuit_t *c = this->circuit;
-
/* EOF on a _connection_ does not mean EOF on a _circuit_.
EOF on a _circuit_ occurs when chop_push_to_upstream processes a FIN.
We should only drop the connection from the circuit if we're no
longer sending in the opposite direction. Also, we should not
drop the connection if its must-transmit timer is still pending. */
- if (c) {
- chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
+ if (this->circuit) {
+ chop_circuit_t *ckt = static_cast<chop_circuit_t *>(this->circuit);
if (evbuffer_get_length(conn_get_inbound(this)) > 0)
if (this->recv())
@@ -1292,7 +1297,7 @@ chop_conn_t::recv_eof()
if ((ckt->sent_fin || this->no_more_transmissions) &&
(!this->must_transmit_timer ||
!evtimer_pending(this->must_transmit_timer, NULL)))
- circuit_drop_downstream(c, this);
+ circuit_drop_downstream(ckt, this);
}
return 0;
}
diff --git a/src/steg.cc b/src/steg.cc
index 768a6d8..8db5498 100644
--- a/src/steg.cc
+++ b/src/steg.cc
@@ -19,12 +19,12 @@ steg_is_supported(const char *name)
/* Instantiate a steg module by name. */
steg_t *
-steg_new(const char *name)
+steg_new(const char *name, bool is_clientside)
{
const steg_module *const *s;
for (s = supported_stegs; *s; s++)
if (!strcmp(name, (**s).name))
- return (**s).new_(/*is_clientside=*/true);
+ return (**s).new_(is_clientside);
return NULL;
}
diff --git a/src/steg.h b/src/steg.h
index 03096f1..63f0fc9 100644
--- a/src/steg.h
+++ b/src/steg.h
@@ -61,7 +61,7 @@ struct steg_module
extern const steg_module *const supported_stegs[];
int steg_is_supported(const char *name);
-steg_t *steg_new(const char *name);
+steg_t *steg_new(const char *name, bool is_clientside);
/* Macros for use in defining steg modules. */
diff --git a/src/steg/nosteg_rr.cc b/src/steg/nosteg_rr.cc
index 8fd70fe..3c8a5a0 100644
--- a/src/steg/nosteg_rr.cc
+++ b/src/steg/nosteg_rr.cc
@@ -94,7 +94,8 @@ nosteg_rr::receive(conn_t *conn, struct evbuffer *dest)
{
struct evbuffer *source = conn_get_inbound(conn);
- log_debug(conn, "receiving %lu bytes",
+ log_debug(conn, "%s-side receiving %lu bytes",
+ is_clientside ? "client" : "server",
(unsigned long)evbuffer_get_length(source));
if (evbuffer_add_buffer(dest, source)) {
More information about the tor-commits
mailing list