[tor-commits] [stegotorus/master] Compilation fixes after the merge

zwol at torproject.org zwol at torproject.org
Fri Jul 20 23:17:06 UTC 2012


commit d9808c06258cd7f1d00172ed078c090d53375b89
Author: Zack Weinberg <zackw at cmu.edu>
Date:   Thu Dec 1 23:45:00 2011 +0000

    Compilation fixes after the merge
---
 Makefile.am                |   10 +-
 NOTES                      |   20 ---
 README.Linda               |   69 ---------
 configure.ac               |   10 +-
 doc/NOTES                  |   20 +++
 doc/NOTES.Linda            |   69 +++++++++
 scripts/start-client.csh   |    8 +
 scripts/start-obfsproxy.sh |  120 ++++++++++++++++
 scripts/start-server.csh   |    6 +
 scripts/torrc              |   12 ++
 src/protocol/chop.cc       |  125 +++++++++---------
 src/steg/http.cc           |  328 ++++++++++++++++++++------------------------
 src/steg/jsSteg.cc         |   20 +--
 src/steg/jsSteg.h          |    4 +-
 src/steg/payloads.cc       |   12 +-
 src/steg/pdfSteg.cc        |    8 +-
 src/steg/pdfSteg.h         |    4 +-
 src/steg/swfSteg.cc        |   46 ++-----
 src/steg/swfSteg.h         |    4 +-
 start-client.csh           |    8 -
 start-obfsproxy.sh         |  120 ----------------
 start-server.csh           |    6 -
 torrc                      |   12 --
 23 files changed, 487 insertions(+), 554 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index bbd89a6..ebe3fdd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,14 +19,14 @@ PROTOCOLS = \
 	src/protocol/x_null.cc
 
 STEGANOGRAPHERS = \
-	src/steg/http.cc \
-	src/steg/payloads.cc \
 	src/steg/cookies.cc \
+	src/steg/crc32.cc \
+	src/steg/http.cc \
 	src/steg/jsSteg.cc \
+	src/steg/payloads.cc \
+	src/steg/pdfSteg.cc \
 	src/steg/swfSteg.cc \
-	src/steg/zpack.cc \
-	src/steg/crc32.cc \
-	src/steg/pdfSteg.cc
+	src/steg/zpack.cc
 
 libstegotorus_a_SOURCES = \
 	src/connections.cc \
diff --git a/NOTES b/NOTES
deleted file mode 100644
index 5b5f23c..0000000
--- a/NOTES
+++ /dev/null
@@ -1,20 +0,0 @@
-To Test ObfsProxy:
-
-start server (start-server.csh)
-start client (start-client.csh)
-start Tor (copy torrc.sample to etc/tor)
-
-
-Now test tor: 
-curl --socks4a 127.0.0.1:9060 -o - http://check.torproject.org
-
-
-To add new steg modules:
-
-1. Add a file below src/steg which implements a steg module; note that
-the STEG_DEFINE_MODULE boilerplate macro is mandatory.  The name of
-the file should be the same as the name of the module (as set by
-STEG_DEFINE_MODULE) plus the .c extension.  
-2. Add the file to the STEGANOGRAPHERS list in Makefile.am.  
-
-That should be all that is necessary.
diff --git a/README.Linda b/README.Linda
deleted file mode 100644
index 2ecaa3c..0000000
--- a/README.Linda
+++ /dev/null
@@ -1,69 +0,0 @@
-compiling obfsproxy on Mac OS X 10.6
-====================================
-
-0) prelims
-
- a) autoconf 2.68
-
-cd ~/src/autoconf-2.68
-./configure --prefix=/usr && make
-make check # takes a long, long time!
-sudo make install 
-
- b) automake 1.11
-
-cd ~/src/automake-1.11.1
-./configure --prefix=/usr && make
-sudo make install
-
-1) obfsproxy
-
-cd ~/src/DEFIANCE/code/obfsproxy
-./autogen.sh
-./configure
-make
-
-
-compiling obfsproxy under Ubuntu 11.10
-======================================
-
-in source directory:
-
-[ in file Makefile.am: add "-Wno-error=format" at the end of WARNINGS variable; remove "-Werror" & save ]
-
-$> ./autogen.sh
-$> ./configure
-[…]
-configure: error: Package requirements (libcrypto >= 0.9.7) were not met:
-
-No package 'libcrypto' found
-[…]
-$> sudo find / -name openssl.pc
-/usr/lib/i386-linux-gnu/pkgconfig/openssl.pc
-$> echo $PKG_CONFIG_PATH
-
-$> export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
-$> ./configure
-$> make
- 
-
-compiling obfsproxy under Ubuntu 10.04 (DETERlab)
-=================================================
-
-create local disk space:
-
-$> sudo /usr/local/etc/emulab/mkextrafs.pl /mnt
-
-copy source code there to compile:
-
-$> sudo mkdir /mnt/local/alice
-$> sudo chown linda:SAF-DEFIANCE /mnt/local/alice
-$> cd /mnt/local/alice
-$> tar -xzvf ~/src/obfsproxy-3.2.tar.gz
-$> cd obfsproxy-3.2
-$> make clean  # without this it will complain about some protocols not found!
-$> emacs Makefile.am
-[ add "-Wno-error=format" at the end of WARNINGS variable; remove "-Werror" & save & exit ]
-$> ./autogen.sh
-$> ./configure
-$> make
diff --git a/configure.ac b/configure.ac
index a0fff6f..5a7650b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,12 +43,16 @@ AM_CONDITIONAL([INTEGRATION_TESTS], [test "$PYOS" = "posix"])
 
 ### Libraries ###
 
-PKG_CHECK_MODULES([libevent], [libevent >= 2.0])
 # libcrypto++ 5.6.0 is the earliest version with GCM support.
 PKG_CHECK_MODULES([libcryptopp], [libcrypto++ >= 5.6.0])
+# libevent 2.0 radically changed the API
+PKG_CHECK_MODULES([libevent], [libevent >= 2.0])
+# there's no good reason not to require the latest zlib, which is
+# from 2009
+PKG_CHECK_MODULES([libz], [zlib >= 1.2.3.4])
 
-LIBS="$libevent_LIBS $libcryptopp_LIBS"
-lib_CPPFLAGS="$libevent_CFLAGS $libcryptopp_CFLAGS"
+LIBS="$libevent_LIBS $libcryptopp_LIBS $libz_LIBS"
+lib_CPPFLAGS="$libevent_CFLAGS $libcryptopp_CFLAGS $libz_LIBS"
 AC_SUBST(lib_CPPFLAGS)
 
 # ntohl and a bunch of related functions require a special library on Windows.
diff --git a/doc/NOTES b/doc/NOTES
new file mode 100644
index 0000000..5b5f23c
--- /dev/null
+++ b/doc/NOTES
@@ -0,0 +1,20 @@
+To Test ObfsProxy:
+
+start server (start-server.csh)
+start client (start-client.csh)
+start Tor (copy torrc.sample to etc/tor)
+
+
+Now test tor: 
+curl --socks4a 127.0.0.1:9060 -o - http://check.torproject.org
+
+
+To add new steg modules:
+
+1. Add a file below src/steg which implements a steg module; note that
+the STEG_DEFINE_MODULE boilerplate macro is mandatory.  The name of
+the file should be the same as the name of the module (as set by
+STEG_DEFINE_MODULE) plus the .c extension.  
+2. Add the file to the STEGANOGRAPHERS list in Makefile.am.  
+
+That should be all that is necessary.
diff --git a/doc/NOTES.Linda b/doc/NOTES.Linda
new file mode 100644
index 0000000..2ecaa3c
--- /dev/null
+++ b/doc/NOTES.Linda
@@ -0,0 +1,69 @@
+compiling obfsproxy on Mac OS X 10.6
+====================================
+
+0) prelims
+
+ a) autoconf 2.68
+
+cd ~/src/autoconf-2.68
+./configure --prefix=/usr && make
+make check # takes a long, long time!
+sudo make install 
+
+ b) automake 1.11
+
+cd ~/src/automake-1.11.1
+./configure --prefix=/usr && make
+sudo make install
+
+1) obfsproxy
+
+cd ~/src/DEFIANCE/code/obfsproxy
+./autogen.sh
+./configure
+make
+
+
+compiling obfsproxy under Ubuntu 11.10
+======================================
+
+in source directory:
+
+[ in file Makefile.am: add "-Wno-error=format" at the end of WARNINGS variable; remove "-Werror" & save ]
+
+$> ./autogen.sh
+$> ./configure
+[…]
+configure: error: Package requirements (libcrypto >= 0.9.7) were not met:
+
+No package 'libcrypto' found
+[…]
+$> sudo find / -name openssl.pc
+/usr/lib/i386-linux-gnu/pkgconfig/openssl.pc
+$> echo $PKG_CONFIG_PATH
+
+$> export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
+$> ./configure
+$> make
+ 
+
+compiling obfsproxy under Ubuntu 10.04 (DETERlab)
+=================================================
+
+create local disk space:
+
+$> sudo /usr/local/etc/emulab/mkextrafs.pl /mnt
+
+copy source code there to compile:
+
+$> sudo mkdir /mnt/local/alice
+$> sudo chown linda:SAF-DEFIANCE /mnt/local/alice
+$> cd /mnt/local/alice
+$> tar -xzvf ~/src/obfsproxy-3.2.tar.gz
+$> cd obfsproxy-3.2
+$> make clean  # without this it will complain about some protocols not found!
+$> emacs Makefile.am
+[ add "-Wno-error=format" at the end of WARNINGS variable; remove "-Werror" & save & exit ]
+$> ./autogen.sh
+$> ./configure
+$> make
diff --git a/scripts/start-client.csh b/scripts/start-client.csh
new file mode 100644
index 0000000..6eda343
--- /dev/null
+++ b/scripts/start-client.csh
@@ -0,0 +1,8 @@
+#!/bin/csh
+# ./obfsproxy --log-min-severity=debug x_dsteg socks 127.0.0.1:1080 x_http
+
+setenv EVENT_NOKQUEUE yes 
+#./obfsproxy --log-min-severity=debug chop socks 127.0.0.1:1080 127.0.0.1:8080 http 127.0.0.1:8081 http
+# ./obfsproxy --log-min-severity=warn chop socks 127.0.0.1:1080 127.0.0.1:8080 http 127.0.0.1:8081 http
+./obfsproxy --log-min-severity=error chop socks 127.0.0.1:1080 127.0.0.1:8080 http 127.0.0.1:8081 http
+
diff --git a/scripts/start-obfsproxy.sh b/scripts/start-obfsproxy.sh
new file mode 100755
index 0000000..45c99da
--- /dev/null
+++ b/scripts/start-obfsproxy.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+ODIR=~/src/DEFIANCE/stegotorus
+
+################################################################################
+# helper functions:
+
+usage () {
+if [ $# -gt 0 ]; then
+    echo " *** ERROR: $1"
+fi
+cat << EOF
+
+usage: $0 <OPTIONS> [server|client] [install-dir]
+
+Start obfsproxy server or client with given options. If the optional install-dir
+is given, override the value set in the script.
+
+OPTIONS:
+   -h             Show this message
+   -i <addr>      IP address (default: 127.0.0.1)
+   -p <n>         port number (default: 8080)
+   -l <severity>  Log severity: warn, error, debug (default: error)
+   -b <host>      Host name (or IP address) of Tor Bridge
+                  with port number attached via ':' or omitted
+                  (default: 87.73.82.145:8080)
+   -n <n>         Multiply the number of IP addresses on the client
+EOF
+}
+
+################################################################################
+# parse command line:
+
+# default values:
+IP=127.0.0.1
+PORT=8080
+N=1
+LOG=error
+BRIDGE_IP=87.73.82.145
+BRIDGE_PORT=8080
+while getopts "hi:p:l:b:n:" OPTION
+do
+    case $OPTION in
+        h|\?)
+            usage; exit 1
+            ;;
+        i)
+            IP=$OPTARG
+            ;;
+        p)
+            PORT=$OPTARG
+            ;;
+	n)
+	    N=$OPTARG
+	    ;;
+	l)
+	    LOG=`echo $OPTARG | tr '[A-Z]' '[a-z]'`  # make lower case
+	    ;;
+	b)
+	    arr=(${OPTARG//:/ })
+	    BRIDGE_IP=${arr[0]}
+	    if [ ${#arr[@]} -gt 1 ]; then
+		BRIDGE_PORT=${arr[1]}
+	    fi
+	    ;;
+    esac
+    shift $((OPTIND-1)); OPTIND=1 
+done
+
+# test if $LOG is valid
+case $LOG in
+    debug|warn|error)
+	;;
+    *) 
+	usage "Unknown log level given: $LOG"; exit 1
+	;;
+esac
+
+# now $@ has remaining arguments:
+if [ $# -lt 1 ]; then
+    usage "need 'server' or 'client' as argument"; exit 1
+fi
+TYPE=`echo $1 | tr '[A-Z]' '[a-z]'`  # turn argument into lower case
+case $TYPE in
+    server|client)
+	;;
+    *)
+	usage "argument $1 not recognized"; exit 1
+	;;
+esac
+
+# check optional install location given as an argument
+if [ $# -gt 1 ]; then
+    if [[ ! -d $2 ]]; then
+	usage "argument $2 is not a directory"; exit 1
+    fi
+    if [[ ! -x $2/obfsproxy ]]; then
+	usage "directory $2 does not contain executable of 'obfsproxy'"; exit 1
+    fi
+    ODIR=$2
+fi
+
+################################################################################
+# start obfsproxy
+
+echo "Using obfsproxy in \"$ODIR\""
+cd $ODIR
+export EVENT_NOKQUEUE=yes
+case $TYPE in
+    server)
+	./obfsproxy --log-min-severity=$LOG chop server $BRIDGE_IP:$BRIDGE_PORT $IP:$PORT
+	;;
+    client)
+	IPS=""
+	for (( c=1; c<=$N; c++)) ; do 
+	    IPS="${IPS}${IP}:${PORT} http " ;
+	done
+	./obfsproxy --log-min-severity=$LOG chop socks 127.0.0.1:1080 $IPS
+	;;
+esac
diff --git a/scripts/start-server.csh b/scripts/start-server.csh
new file mode 100644
index 0000000..b7d61e6
--- /dev/null
+++ b/scripts/start-server.csh
@@ -0,0 +1,6 @@
+#!/bin/csh
+setenv EVENT_NOKQUEUE yes 
+# ./obfsproxy --log-min-severity=debug chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
+# ./obfsproxy --log-min-severity=warn chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
+./obfsproxy --log-min-severity=error chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
+
diff --git a/scripts/torrc b/scripts/torrc
new file mode 100644
index 0000000..ff27e61
--- /dev/null
+++ b/scripts/torrc
@@ -0,0 +1,12 @@
+SocksPort 9060 # what port to open for local application connections
+SocksListenAddress 127.0.0.1 # accept connections only from localhost
+
+SafeLogging 0
+Log info file ./info.log
+Log debug file ./debug.log
+
+Socks4Proxy 127.0.0.1:1080
+
+# Bridge 87.73.82.145:8080
+Bridge 127.0.0.1:8080
+UseBridges 1
diff --git a/src/protocol/chop.cc b/src/protocol/chop.cc
index 7045ea8..3e87428 100644
--- a/src/protocol/chop.cc
+++ b/src/protocol/chop.cc
@@ -70,6 +70,8 @@ static const uint8_t s2c_key[] =
 
 /* Connections and circuits */
 
+typedef unordered_map<uint64_t, circuit_t *> chop_circuit_table;
+
 namespace {
   struct chop_conn_t : conn_t
   {
@@ -84,7 +86,7 @@ namespace {
   struct chop_circuit_t : circuit_t
   {
     chop_reassembly_elt reassembly_queue;
-    unordered_set<chop_conn_t *> downstreams;
+    unordered_set<conn_t *> downstreams;
     encryptor *send_crypt;
     decryptor *recv_crypt;
 
@@ -100,8 +102,6 @@ namespace {
     CIRCUIT_DECLARE_METHODS(chop);
   };
 
-  typedef unordered_map<uint64_t, chop_circuit_t *> chop_circuit_table;
-
   struct chop_config_t : config_t
   {
     struct evutil_addrinfo *up_address;
@@ -223,22 +223,22 @@ chop_decrypt_header(chop_circuit_t *ckt,
 
 /* Transmit subroutines. */
 
-static chop_conn_t *
+static conn_t *
 chop_pick_connection(chop_circuit_t *ckt, size_t desired, size_t *blocksize)
 {
   size_t maxbelow = 0;
   size_t minabove = SIZE_MAX;
-  chop_conn_t *targbelow = NULL;
-  chop_conn_t *targabove = NULL;
+  conn_t *targbelow = NULL;
+  conn_t *targabove = NULL;
 
   if (desired > CHOP_MAX_DATA)
     desired = CHOP_MAX_DATA;
 
   /* Find the best fit for the desired transmission from all the
      outbound connections' transmit rooms. */
-  for (unordered_set<chop_conn_t *>::iterator i = ckt->downstreams.begin();
+  for (unordered_set<conn_t *>::iterator i = ckt->downstreams.begin();
        i != ckt->downstreams.end(); i++) {
-    chop_conn_t *conn = *i;
+    chop_conn_t *conn = static_cast<chop_conn_t *>(*i);
     /* We can only use candidates that have a steg target already. */
     if (conn->steg) {
       /* Find the connections whose transmit rooms are closest to the
@@ -282,13 +282,14 @@ chop_pick_connection(chop_circuit_t *ckt, size_t desired, size_t *blocksize)
 }
 
 static int
-chop_send_block(chop_conn_t *dest,
+chop_send_block(conn_t *d,
                 chop_circuit_t *ckt,
                 struct evbuffer *source,
                 struct evbuffer *block,
                 uint16_t length,
                 uint16_t flags)
 {
+  chop_conn_t *dest = static_cast<chop_conn_t *>(d);
   chop_header hdr;
   struct evbuffer_iovec v;
   uint8_t *p;
@@ -354,17 +355,18 @@ chop_send_block(chop_conn_t *dest,
 }
 
 static int
-chop_send_blocks(chop_circuit_t *ckt)
+chop_send_blocks(circuit_t *c)
 {
-  struct evbuffer *xmit_pending = bufferevent_get_input(ckt->up_buffer);
+  chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
+  struct evbuffer *xmit_pending = bufferevent_get_input(c->up_buffer);
   struct evbuffer *block;
-  chop_conn_t *target;
+  conn_t *target;
   size_t avail;
   size_t blocksize;
   uint16_t flags;
 
   if (!(block = evbuffer_new())) {
-    log_warn(ckt, "allocation failure");
+    log_warn(c, "allocation failure");
     return -1;
   }
 
@@ -372,14 +374,14 @@ chop_send_blocks(chop_circuit_t *ckt)
     avail = evbuffer_get_length(xmit_pending);
     flags = ckt->sent_syn ? 0 : CHOP_F_SYN;
 
-    log_debug(ckt, "%lu bytes to send", (unsigned long)avail);
+    log_debug(c, "%lu bytes to send", (unsigned long)avail);
 
     if (avail == 0)
       break;
 
     target = chop_pick_connection(ckt, avail, &blocksize);
     if (!target) {
-      log_debug(ckt, "no target connection available");
+      log_debug(c, "no target connection available");
       /* this is not an error; it can happen e.g. when the server has
          something to send immediately and the client hasn't spoken yet */
       break;
@@ -400,14 +402,15 @@ chop_send_blocks(chop_circuit_t *ckt)
   evbuffer_free(block);
   avail = evbuffer_get_length(xmit_pending);
   if (avail)
-    log_debug(ckt, "%lu bytes still waiting to be sent", (unsigned long)avail);
+    log_debug(c, "%lu bytes still waiting to be sent", (unsigned long)avail);
   return 0;
 }
 
 static int
-chop_send_targeted(chop_circuit_t *ckt, chop_conn_t *target, size_t blocksize)
+chop_send_targeted(circuit_t *c, conn_t *target, size_t blocksize)
 {
-  struct evbuffer *xmit_pending = bufferevent_get_input(ckt->up_buffer);
+  chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
+  struct evbuffer *xmit_pending = bufferevent_get_input(c->up_buffer);
   size_t avail = evbuffer_get_length(xmit_pending);
   struct evbuffer *block = evbuffer_new();
   uint16_t flags = 0;
@@ -438,8 +441,7 @@ chop_send_targeted(chop_circuit_t *ckt, chop_conn_t *target, size_t blocksize)
     evbuffer_free(block);
     avail = evbuffer_get_length(xmit_pending);
     if (avail)
-      log_debug(ckt, "%lu bytes still waiting to be sent",
-                (unsigned long)avail);
+      log_debug(c, "%lu bytes still waiting to be sent", (unsigned long)avail);
     return 0;
 
   } else {
@@ -482,23 +484,24 @@ chop_send_targeted(chop_circuit_t *ckt, chop_conn_t *target, size_t blocksize)
 }
 
 static int
-chop_send_chaff(chop_circuit_t *ckt)
+chop_send_chaff(circuit_t *c)
 {
+  chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
   size_t room;
 
-  chop_conn_t *target = chop_pick_connection(ckt, 1, &room);
+  conn_t *target = chop_pick_connection(ckt, 1, &room);
   if (!target) {
     /* If we have connections and we can't send, that means we're waiting
        for the server to respond.  Just wait. */
     return 0;
   }
-  return chop_send_targeted(ckt, target, room);
+  return chop_send_targeted(c, target, room);
 }
 
 static void
 must_transmit_timer_cb(evutil_socket_t, short, void *arg)
 {
-  chop_conn_t *conn = static_cast<chop_conn_t *>(arg);
+  chop_conn_t *conn = static_cast<chop_conn_t*>(arg);
   size_t room;
 
   if (!conn->circuit) {
@@ -518,7 +521,7 @@ must_transmit_timer_cb(evutil_socket_t, short, void *arg)
   }
 
   log_debug(conn, "must transmit");
-  chop_send_targeted(static_cast<chop_circuit_t *>(conn->circuit), conn, room);
+  chop_send_targeted(conn->circuit, conn, room);
 }
 
 /* Receive subroutines. */
@@ -542,9 +545,9 @@ mod32_le(uint32_t s, uint32_t t)
 /** Add BLOCK to the reassembly queue at the appropriate location
     and merge adjacent blocks to the extent possible. */
 static int
-chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
-                      chop_header *hdr)
+chop_reassemble_block(circuit_t *c, struct evbuffer *block, chop_header *hdr)
 {
+  chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
   chop_reassembly_elt *queue = &ckt->reassembly_queue;
   chop_reassembly_elt *p, *q;
 
@@ -554,14 +557,14 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
        contents.  Doing all chaff-handling here simplifies the caller
        at the expense of slightly more buffer-management overhead. */
     if (!(hdr->flags & (CHOP_F_SYN|CHOP_F_FIN))) {
-      log_debug(ckt, "discarding chaff with no flags");
+      log_debug(c, "discarding chaff with no flags");
       evbuffer_free(block);
       return 0;
     }
 
     hdr->length = 0;
     evbuffer_drain(block, evbuffer_get_length(block));
-    log_debug(ckt, "chaff with flags, treating length as 0");
+    log_debug(c, "chaff with flags, treating length as 0");
   }
 
   /* SYN must occur at offset zero, may not be duplicated, and if we
@@ -572,7 +575,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
        (queue->next != queue &&
         ((queue->next->flags & CHOP_F_SYN) ||
          !mod32_le(hdr->offset + hdr->length, queue->next->offset))))) {
-    log_warn(ckt, "protocol error: inappropriate SYN block");
+    log_warn(c, "protocol error: inappropriate SYN block");
     return -1;
   }
 
@@ -581,7 +584,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
   if ((hdr->flags & CHOP_F_FIN) && queue->prev != queue &&
       ((queue->prev->flags & CHOP_F_FIN) ||
        !mod32_le(queue->prev->offset + queue->prev->length, hdr->offset))) {
-    log_warn(ckt, "protocol error: inappropriate FIN block");
+    log_warn(c, "protocol error: inappropriate FIN block");
     return -1;
   }
 
@@ -592,7 +595,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
         !mod32_le(queue->next->offset + queue->next->length, hdr->offset)) ||
        ((queue->prev->flags & CHOP_F_FIN) &&
         !mod32_le(hdr->offset + hdr->length, queue->prev->offset)))) {
-    log_warn(ckt, "protocol error: inappropriate normal block");
+    log_warn(c, "protocol error: inappropriate normal block");
     return -1;
   }
 
@@ -614,7 +617,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
 
       /* protocol error: this block goes before 'p' but does not fit
          after 'p->prev' */
-      log_warn(ckt, "protocol error: %u byte block does not fit at offset %u",
+      log_warn(c, "protocol error: %u byte block does not fit at offset %u",
                hdr->length, hdr->offset);
       return -1;
     }
@@ -625,7 +628,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
      that this block goes after the last block in the list (aka p->prev). */
   if (!p->data && p->prev->data &&
       !mod32_lt(p->prev->offset + p->prev->length, hdr->offset)) {
-    log_warn(ckt, "protocol error: %u byte block does not fit at offset %u "
+    log_warn(c, "protocol error: %u byte block does not fit at offset %u "
                 "(sentinel case)",
              hdr->length, hdr->offset);
     return -1;
@@ -645,7 +648,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
 
  grow_back:
   if (evbuffer_add_buffer(p->data, block)) {
-    log_warn(ckt, "failed to append to existing buffer");
+    log_warn(c, "failed to append to existing buffer");
     return -1;
   }
   evbuffer_free(block);
@@ -656,7 +659,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
   while (p->next->data && p->offset + p->length == p->next->offset) {
     q = p->next;
     if (evbuffer_add_buffer(p->data, q->data)) {
-      log_warn(ckt, "failed to merge buffers");
+      log_warn(c, "failed to merge buffers");
       return -1;
     }
     p->length += q->length;
@@ -671,7 +674,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
 
  grow_front:
   if (evbuffer_prepend_buffer(p->data, block)) {
-    log_warn(ckt, "failed to prepend to existing buffer");
+    log_warn(c, "failed to prepend to existing buffer");
     return -1;
   }
   evbuffer_free(block);
@@ -683,7 +686,7 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
   while (p->prev->data && p->offset == p->prev->offset + p->prev->length) {
     q = p->prev;
     if (evbuffer_prepend_buffer(p->data, q->data)) {
-      log_warn(ckt, "failed to merge buffers");
+      log_warn(c, "failed to merge buffers");
       return -1;
     }
     p->length += q->length;
@@ -701,31 +704,31 @@ chop_reassemble_block(chop_circuit_t *ckt, struct evbuffer *block,
 
 /* Flush as much data toward upstream as we can. */
 static int
-chop_push_to_upstream(chop_circuit_t *ckt)
+chop_push_to_upstream(circuit_t *c)
 {
+  chop_circuit_t *ckt = static_cast<chop_circuit_t *>(c);
   /* Only the first reassembly queue entry, if any, can possibly be
      ready to flush (because chop_reassemble_block ensures that there
      are gaps between all queue elements).  */
   chop_reassembly_elt *ready = ckt->reassembly_queue.next;
   if (!ready->data || ckt->recv_offset != ready->offset) {
-    log_debug(ckt, "no data pushable to upstream yet");
+    log_debug(c, "no data pushable to upstream yet");
     return 0;
   }
 
   if (!ckt->received_syn) {
     if (!(ready->flags & CHOP_F_SYN)) {
-      log_debug(ckt, "waiting for SYN");
+      log_debug(c, "waiting for SYN");
       return 0;
     }
-    log_debug(ckt, "processed SYN");
+    log_debug(c, "processed SYN");
     ckt->received_syn = true;
   }
 
-  log_debug(ckt, "can push %lu bytes to upstream",
+  log_debug(c, "can push %lu bytes to upstream",
             (unsigned long)evbuffer_get_length(ready->data));
-  if (evbuffer_add_buffer(bufferevent_get_output(ckt->up_buffer),
-                          ready->data)) {
-    log_warn(ckt, "failure pushing data to upstream");
+  if (evbuffer_add_buffer(bufferevent_get_output(c->up_buffer), ready->data)) {
+    log_warn(c, "failure pushing data to upstream");
     return -1;
   }
 
@@ -735,8 +738,8 @@ chop_push_to_upstream(chop_circuit_t *ckt)
     log_assert(!ckt->received_fin);
     log_assert(ready->next == &ckt->reassembly_queue);
     ckt->received_fin = true;
-    log_debug(ckt, "processed FIN");
-    circuit_recv_eof(ckt);
+    log_debug(c, "processed FIN");
+    circuit_recv_eof(c);
   }
 
   log_assert(ready->next == &ckt->reassembly_queue ||
@@ -752,14 +755,14 @@ chop_push_to_upstream(chop_circuit_t *ckt)
 /* Circuit handling */
 
 static int
-chop_find_or_make_circuit(chop_conn_t *conn, uint64_t circuit_id)
+chop_find_or_make_circuit(conn_t *conn, uint64_t circuit_id)
 {
   log_assert(conn->cfg->mode == LSN_SIMPLE_SERVER);
 
   chop_config_t *cfg = static_cast<chop_config_t *>(conn->cfg);
   chop_circuit_table::value_type in(circuit_id, 0);
   std::pair<chop_circuit_table::iterator, bool> out = cfg->circuits.insert(in);
-  chop_circuit_t *ck;
+  circuit_t *ck;
 
   if (!out.second) { // element already exists
     if (!out.first->second) {
@@ -769,7 +772,7 @@ chop_find_or_make_circuit(chop_conn_t *conn, uint64_t circuit_id)
     ck = out.first->second;
     log_debug(conn, "found circuit to %s", ck->up_peer);
   } else {
-    ck = static_cast<chop_circuit_t *>(circuit_create(cfg, 0));
+    ck = cfg->circuit_create(0);
     if (!ck) {
       log_warn(conn, "failed to create new circuit");
       return -1;
@@ -780,7 +783,7 @@ chop_find_or_make_circuit(chop_conn_t *conn, uint64_t circuit_id)
       return -1;
     }
     log_debug(conn, "created new circuit to %s", ck->up_peer);
-    ck->circuit_id = circuit_id;
+    static_cast<chop_circuit_t *>(ck)->circuit_id = circuit_id;
     out.first->second = ck;
   }
 
@@ -933,9 +936,9 @@ chop_circuit_t::~chop_circuit_t()
   chop_reassembly_elt *p, *q, *queue;
   chop_circuit_table::iterator out;
 
-  for (unordered_set<chop_conn_t *>::iterator i = this->downstreams.begin();
+  for (unordered_set<conn_t *>::iterator i = this->downstreams.begin();
        i != this->downstreams.end(); i++) {
-    chop_conn_t *conn = *i;
+    conn_t *conn = *i;
     conn->circuit = NULL;
     if (evbuffer_get_length(conn_get_outbound(conn)) > 0)
       conn_do_flush(conn);
@@ -968,9 +971,8 @@ chop_circuit_t::~chop_circuit_t()
 }
 
 void
-chop_circuit_t::add_downstream(conn_t *cn)
+chop_circuit_t::add_downstream(conn_t *conn)
 {
-  chop_conn_t *conn = static_cast<chop_conn_t *>(cn);
   this->downstreams.insert(conn);
   log_debug(this, "added connection <%d.%d> to %s, now %lu",
             this->serial, conn->serial, conn->peername,
@@ -980,9 +982,8 @@ chop_circuit_t::add_downstream(conn_t *cn)
 }
 
 void
-chop_circuit_t::drop_downstream(conn_t *cn)
+chop_circuit_t::drop_downstream(conn_t *conn)
 {
-  chop_conn_t *conn = static_cast<chop_conn_t *>(cn);
   this->downstreams.erase(conn);
   log_debug(this, "dropped connection <%d.%d> to %s, now %lu",
             this->serial, conn->serial, conn->peername,
@@ -1094,9 +1095,9 @@ chop_circuit_t::send()
      as long as we haven't both sent and received a FIN, or we might
      deadlock. */
   if (this->sent_fin && this->received_fin) {
-    for (unordered_set<chop_conn_t *>::iterator i = this->downstreams.begin();
+    for (unordered_set<conn_t *>::iterator i = this->downstreams.begin();
          i != this->downstreams.end(); i++) {
-      chop_conn_t *conn = *i;
+      chop_conn_t *conn = static_cast<chop_conn_t*>(*i);
       if (conn->must_transmit_timer &&
           evtimer_pending(conn->must_transmit_timer, NULL))
         must_transmit_timer_cb(-1, 0, conn);
@@ -1233,13 +1234,13 @@ chop_conn_t::recv()
       return -1;
     }
 
-    if (chop_reassemble_block(ckt, block, &hdr)) {
+    if (chop_reassemble_block(c, block, &hdr)) {
       evbuffer_free(block);
       return -1;
     }
   }
 
-  if (chop_push_to_upstream(ckt))
+  if (chop_push_to_upstream(c))
     return -1;
 
   /* It may have now become possible to send queued data. */
diff --git a/src/steg/http.cc b/src/steg/http.cc
index 7377196..aed9322 100644
--- a/src/steg/http.cc
+++ b/src/steg/http.cc
@@ -32,8 +32,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     See LICENSE for other credits and copying information
 */
 
-
-
 #include "util.h"
 #include "connections.h"
 #include "steg.h"
@@ -46,17 +44,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <event2/buffer.h>
 #include <stdio.h>
 
-
-
-
-
-
 #define MIN_COOKIE_SIZE 24
 #define MAX_COOKIE_SIZE 1024
 
-
-int 
-x_http2_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
+int
+http_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
 
 int
 lookup_peer_name_from_ip(char* p_ip, char* p_name);
@@ -65,57 +57,52 @@ lookup_peer_name_from_ip(char* p_ip, char* p_name);
 static int has_peer_name = 0;
 static char peername[512];
 
-
-struct x_http2_steg_t
+namespace {
+struct http : steg_t
 {
-  steg_t super;
-  
-  int have_transmitted;
-  int have_received;
+  bool have_transmitted : 1;
+  bool have_received : 1;
   int type;
-};
 
+  STEG_DECLARE_METHODS(http);
+};
+}
 
-STEG_DEFINE_MODULE(x_http2,
+STEG_DEFINE_MODULE(http,
                    1024,  /* client-server max data rate - made up */
                    10240, /* server-client max data rate - ditto */
                    1,     /* max concurrent connections per IP */
                    1);     /* max concurrent IPs */
 
-
-
-
-
-
-int x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn);
-int x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn);
+int http_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn);
+int http_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn);
 
 void evbuffer_dump(struct evbuffer *buf, FILE *out);
 void buf_dump(unsigned char* buf, int len, FILE *out);
 int gen_uri_field(char* uri, unsigned int uri_sz, char* data, int datalen);
 
 
-void 
-evbuffer_dump(struct evbuffer *buf, FILE *out) 
+void
+evbuffer_dump(struct evbuffer *buf, FILE *out)
 {
   int nextent = evbuffer_peek(buf, SSIZE_MAX, 0, 0, 0);
   struct evbuffer_iovec v[nextent];
   int i;
   const unsigned char *p, *limit;
-  
+
   if (evbuffer_peek(buf, -1, 0, v, nextent) != nextent)
     abort();
-  
+
   for (i = 0; i < nextent; i++) {
-    p = v[i].iov_base;
+    p = (const unsigned char *)v[i].iov_base;
     limit = p + v[i].iov_len;
-    
+
     putc('|', out);
     while (p < limit) {
       if (*p < 0x20 || *p >= 0x7F || *p == '\\' || *p == '|')
-	fprintf(out, "\\x%02x", *p);
+        fprintf(out, "\\x%02x", *p);
       else
-	putc(*p, out);
+        putc(*p, out);
       p++;
     }
   }
@@ -126,8 +113,8 @@ evbuffer_dump(struct evbuffer *buf, FILE *out)
 
 
 
-void 
-buf_dump(unsigned char* buf, int len, FILE *out) 
+void
+buf_dump(unsigned char* buf, int len, FILE *out)
 {
   int i=0;
   putc('|', out);
@@ -143,15 +130,9 @@ buf_dump(unsigned char* buf, int len, FILE *out)
 }
 
 
-
-
-
-steg_t * 
-x_http2_new(rng_t *rng, unsigned int is_clientside)
+http::http()
+  : have_transmitted(false), have_received(false)
 {
-
-  STEG_NEW(x_http2, state, rng, is_clientside);
-
   if (is_clientside)
     load_payloads("traces/client.out");
   else {
@@ -162,34 +143,24 @@ x_http2_new(rng_t *rng, unsigned int is_clientside)
     init_PDF_payload_pool(HTTP_MSG_BUF_SIZE, TYPE_HTTP_RESPONSE, PDF_MIN_AVAIL_SIZE);
     init_SWF_payload_pool(HTTP_MSG_BUF_SIZE, TYPE_HTTP_RESPONSE, 0);
   }
-
-
-  /* if there were extra stuff to fill in, you would do it here */
-  return upcast_steg(state);
 }
 
-void
-x_http2_del(steg_t *s)
+http::~http()
 {
-  x_http2_steg_t *state = downcast_steg(s);
-
-  STEG_DEL(s);
-
-  /* if there were extra stuff to deallocate, you would do it here */
-  free(state);
 }
 
-
-// x_http2_detect determines if a packet should be processed by the http2 steg module 
-unsigned int
-x_http2_detect(conn_t *conn)
+/** Determine whether a connection should be processed by this
+    steganographer. */
+bool
+http::detect(conn_t *conn)
 {
   struct evbuffer *buf = conn_get_inbound(conn);
   unsigned char *data;
 
   //return 0;
 /*****
- Here is a list of HTTP response codes extracted from the server-portals.out trace
+ Here is a list of HTTP response codes extracted from the
+ server-portals.out trace
 
 7369 HTTP/1.1 200 OK
  470 HTTP/1.1 302 Found
@@ -224,7 +195,7 @@ x_http2_detect(conn_t *conn)
 
   if (evbuffer_get_length(buf) >= 12) {
     data = evbuffer_pullup(buf, 12);
-    
+
     if (data != NULL &&
          ((!memcmp(data, "HTTP/1.1 200", 12)) ||
           (!memcmp(data, "HTTP/1.1 302", 12)) ||
@@ -235,7 +206,7 @@ x_http2_detect(conn_t *conn)
           (!memcmp(data, "HTTP/1.1 301", 12)) ||
           (!memcmp(data, "HTTP/1.1 302", 12)) ||
           (!memcmp(data, "HTTP/1.1 404", 12)))) {
-      log_debug("x_http2_detect: valid response");
+      log_debug("http_detect: valid response");
       return 1;
     }
   }
@@ -258,42 +229,38 @@ x_http2_detect(conn_t *conn)
 
   if (evbuffer_get_length(buf) >= 9) {
     data = evbuffer_pullup(buf, 9);
-    if (data != NULL && (!memcmp(data, "GET /", 5) || !memcmp(data, "POST /", 5) || !memcmp(data, "Cookie", 6))) {
-      log_debug("x_http2_detect: valid request");
-      return 1;
+    if (data != NULL && (!memcmp(data, "GET /", 5) ||
+                         !memcmp(data, "POST /", 5) ||
+                         !memcmp(data, "Cookie", 6))) {
+      log_debug("http_detect: valid request");
+      return true;
     }
   }
- 
-  log_debug("x_http2_detect: didn't find either HTTP request or response");
+
+  log_debug("http_detect: didn't find either HTTP request or response");
   /* Didn't find either the client or the server pattern. */
-  return 0;
+  return false;
 }
 
 size_t
-x_http2_transmit_room(steg_t *s, conn_t *conn)
+http::transmit_room(conn_t *)
 {
   unsigned int mjc;
 
-  if (downcast_steg(s)->have_transmitted)
+  if (have_transmitted)
     /* can't send any more on this connection */
     return 0;
-  
-
-  if (s->is_clientside) {
-    /* per http://www.boutell.com/newfaq/misc/urllength.html,
-       IE<9 can handle no more than 2048 characters in the path
-       component of a URL; we're not talking to IE, but this limit
-       means longer paths look fishy; we hex-encode the path, so
-       we have to cut the number in half. */
+
+
+  if (is_clientside) {
     return (MIN_COOKIE_SIZE + rand() % (MAX_COOKIE_SIZE - MIN_COOKIE_SIZE)) / 4;
-    // return 1024;
-  } 
+  }
   else {
 
-    if (!downcast_steg(s)->have_received)
+    if (!have_received)
       return 0;
 
-    switch(downcast_steg(s)->type) {
+    switch (type) {
 
     case HTTP_CONTENT_SWF:
       return 1024;
@@ -301,10 +268,10 @@ x_http2_transmit_room(steg_t *s, conn_t *conn)
     case HTTP_CONTENT_JAVASCRIPT:
       mjc = get_max_JS_capacity() / 2;
       if (mjc > 1024) {
-	// it should be 1024 + ...., but seems like we need to be a little bit smaller (chopper bug?)
-	int rval = 512 + rand()%(mjc - 1024);  
-	//	fprintf(stderr, "returning rval %d, mjc  %d\n", rval, mjc);
-	return rval;
+        // it should be 1024 + ...., but seems like we need to be a little bit smaller (chopper bug?)
+        int rval = 512 + rand()%(mjc - 1024);
+        //	fprintf(stderr, "returning rval %d, mjc  %d\n", rval, mjc);
+        return rval;
       }
       log_warn("js capacity too small\n");
       exit(-1);
@@ -312,10 +279,10 @@ x_http2_transmit_room(steg_t *s, conn_t *conn)
     case HTTP_CONTENT_HTML:
       mjc = get_max_HTML_capacity() / 2;
       if (mjc > 1024) {
-	// it should be 1024 + ...., but seems like we need to be a little bit smaller (chopper bug?)
-	int rval = 512 + rand()%(mjc - 1024);  
-	//	fprintf(stderr, "returning rval %d, mjc  %d\n", rval, mjc);
-	return rval;
+        // it should be 1024 + ...., but seems like we need to be a little bit smaller (chopper bug?)
+        int rval = 512 + rand()%(mjc - 1024);
+        //	fprintf(stderr, "returning rval %d, mjc  %d\n", rval, mjc);
+        return rval;
       }
       log_warn("js capacity too small\n");
       exit(-1);
@@ -340,7 +307,7 @@ lookup_peer_name_from_ip(char* p_ip, char* p_name)  {
   struct addrinfo* aip;
   struct addrinfo hint;
   char buf[128];
-     
+
   hint.ai_flags = AI_CANONNAME;
   hint.ai_family = 0;
   hint.ai_socktype = 0;
@@ -349,16 +316,16 @@ lookup_peer_name_from_ip(char* p_ip, char* p_name)  {
   hint.ai_canonname = NULL;
   hint.ai_addr = NULL;
   hint.ai_next = NULL;
-  
+
   strcpy(buf, p_ip);
   buf[strchr(buf, ':') - buf] = 0;
 
-  
+
   if (getaddrinfo(buf, NULL, &hint, &ailist)) {
     fprintf(stderr, "error: getaddrinfo() %s\n", p_ip);
     exit(1);
   }
- 
+
   for (aip = ailist; aip != NULL; aip = aip->ai_next) {
     char buf[512];
     if (getnameinfo(aip->ai_addr, sizeof(struct sockaddr), buf, 512, NULL, 0, 0) == 0) {
@@ -366,7 +333,7 @@ lookup_peer_name_from_ip(char* p_ip, char* p_name)  {
       return 1;
     }
   }
-  
+
   return 0;
 }
 
@@ -377,8 +344,8 @@ lookup_peer_name_from_ip(char* p_ip, char* p_name)  {
 
 
 
-int 
-x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
+int
+http_client_cookie_transmit (http *s, struct evbuffer *source, conn_t *conn) {
 
   /* On the client side, we have to embed the data in a GET query somehow;
      the only plausible places to put it are the URL and cookies.  This
@@ -398,7 +365,7 @@ x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn
 
   //  size_t sofar = 0;
   size_t cookie_len;
-  
+
 
   /* Convert all the data in 'source' to hexadecimal and write it to
      'scratch'. Data is padded to a multiple of four characters with
@@ -410,12 +377,12 @@ x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn
 
 
 
-  datalen = 0;    
+  datalen = 0;
   cookie_len = 4 * sbuflen + rand() % 4;
-  
+
 
   nv = evbuffer_peek(source, sbuflen, NULL, NULL, 0);
-  iv = xzalloc(sizeof(struct evbuffer_iovec) * nv);
+  iv = (evbuffer_iovec*)xzalloc(sizeof(struct evbuffer_iovec) * nv);
 
   if (evbuffer_peek(source, sbuflen, NULL, iv, nv) != nv) {
     free(iv);
@@ -436,13 +403,13 @@ x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn
   //   fprintf(stderr, "%s\n", buf);
   //   exit(-1);
   // }
-    
 
-  
+
+
   cnt = 0;
-  
+
   for (i = 0; i < nv; i++) {
-    const unsigned char *p = iv[i].iov_base;
+    const unsigned char *p = (const unsigned char *)iv[i].iov_base;
     const unsigned char *limit = p + iv[i].iov_len;
     char c;
     while (p < limit && cnt < sbuflen) {
@@ -453,7 +420,7 @@ x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn
       cnt++;
     }
   }
-  
+
   free(iv);
 
   if (cookie_len < 4) cookie_len = 4;
@@ -478,20 +445,20 @@ x_http2_client_cookie_transmit (steg_t *s, struct evbuffer *source, conn_t *conn
       log_debug("error ***********************");
       return -1;
     }
- 
+
   // debug
   // log_warn("CLIENT HTTP request header:");
   // buf_dump((unsigned char*)buf, len, stderr);
- 
+
   //  sofar += datalen/2;
   evbuffer_drain(source, datalen/2);
-  
+
   log_debug("CLIENT TRANSMITTED payload %d\n", (int) sbuflen);
-  
+
   conn_cease_transmission(conn);
 
-  downcast_steg(s)->type = find_uri_type(buf, sizeof(buf));
-  downcast_steg(s)->have_transmitted = 1;
+  s->type = find_uri_type(buf, sizeof(buf));
+  s->have_transmitted = true;
   return 0;
 }
 
@@ -510,10 +477,10 @@ int gen_uri_field(char* uri, unsigned int uri_sz, char* data, int datalen) {
 
     if (r == 1) {
       r = rand() % 46;
-      if (r < 20) 
-	uri[so_far++] = 'g' + r;      
-      else 
-	uri[so_far++] = 'A' + r - 20;
+      if (r < 20)
+        uri[so_far++] = 'g' + r;
+      else
+        uri[so_far++] = 'A' + r - 20;
     }
     else {
       uri[so_far++] = data[0];
@@ -562,16 +529,16 @@ int gen_uri_field(char* uri, unsigned int uri_sz, char* data, int datalen) {
 
 
 
-int 
-x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
+int
+http_client_uri_transmit (http *s, struct evbuffer *source, conn_t *conn) {
 
 
   struct evbuffer *dest = conn_get_outbound(conn);
 
-  
+
   struct evbuffer_iovec *iv;
   int i, nv;
-  
+
   /* Convert all the data in 'source' to hexadecimal and write it to
      'scratch'. Data is padded to a multiple of four characters with
      equals signs. */
@@ -579,26 +546,26 @@ x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
   size_t datalen = 0;
   int cnt = 0;
   char data[2*slen];
-  
+
   char outbuf[1024];
   int len =0;
   char buf[10000];
-  
-  
+
+
   if (has_peer_name == 0 && lookup_peer_name_from_ip((char*) conn->peername, peername))
     has_peer_name = 1;
-  
-  
+
+
 
   nv = evbuffer_peek(source, slen, NULL, NULL, 0);
-  iv = xzalloc(sizeof(struct evbuffer_iovec) * nv);
+  iv = (evbuffer_iovec *)xzalloc(sizeof(struct evbuffer_iovec) * nv);
   if (evbuffer_peek(source, slen, NULL, iv, nv) != nv) {
     free(iv);
     return -1;
   }
-  
+
   for (i = 0; i < nv; i++) {
-    const unsigned char *p = iv[i].iov_base;
+    const unsigned char *p = (const unsigned char *)iv[i].iov_base;
     const unsigned char *limit = p + iv[i].iov_len;
     char c;
     while (p < limit) {
@@ -608,13 +575,13 @@ x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
       }
   }
   free(iv);
-  
+
 
 
   do {
     datalen = gen_uri_field(outbuf, sizeof(outbuf), data, datalen);
   } while (datalen == 0);
-  
+
 
 
 
@@ -623,8 +590,8 @@ x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
     len = find_client_payload(buf, sizeof(buf), TYPE_HTTP_REQUEST);
     if (cnt++ == 10) return -1;
   }
-  
-  
+
+
   //  fprintf(stderr, "outbuf = %s\n", outbuf);
 
   if (evbuffer_add(dest, outbuf, datalen)  ||  // add uri field
@@ -640,10 +607,10 @@ x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
 
   evbuffer_drain(source, slen);
   conn_cease_transmission(conn);
-  downcast_steg(s)->type = find_uri_type(outbuf, sizeof(outbuf));
-  downcast_steg(s)->have_transmitted = 1;
+  s->type = find_uri_type(outbuf, sizeof(outbuf));
+  s->have_transmitted = 1;
   return 0;
- 
+
 }
 
 
@@ -666,45 +633,45 @@ x_http2_client_uri_transmit (steg_t *s, struct evbuffer *source, conn_t *conn) {
 
 
 int
-x_http2_transmit(steg_t *s, struct evbuffer *source, conn_t *conn)
+http::transmit(struct evbuffer *source, conn_t *conn)
 {
   //  struct evbuffer *dest = conn_get_outbound(conn);
 
-  //  fprintf(stderr, "in x_http2_ transmit %d\n", downcast_steg(s)->type);
-    
+  //  fprintf(stderr, "in http_ transmit %d\n", downcast_steg(s)->type);
+
 
 
-  if (s->is_clientside) {
+  if (is_clientside) {
         /* On the client side, we have to embed the data in a GET query somehow;
        the only plausible places to put it are the URL and cookies.  This
        presently uses the URL. And it can't be binary. */
 
     if (evbuffer_get_length(source) < 72)
-      return x_http2_client_uri_transmit(s, source, conn); //@@
-    return x_http2_client_cookie_transmit(s, source, conn); //@@
-  } 
+      return http_client_uri_transmit(this, source, conn); //@@
+    return http_client_cookie_transmit(this, source, conn); //@@
+  }
   else {
     int rval = -1;
-    switch(downcast_steg(s)->type) {
-      
-    case HTTP_CONTENT_SWF: 
-      rval = x_http2_server_SWF_transmit(s, source, conn);
+    switch(type) {
+
+    case HTTP_CONTENT_SWF:
+      rval = http_server_SWF_transmit(this, source, conn);
       break;
 
     case HTTP_CONTENT_JAVASCRIPT:
-      rval = x_http2_server_JS_transmit(s, source, conn, HTTP_CONTENT_JAVASCRIPT);
+      rval = http_server_JS_transmit(this, source, conn, HTTP_CONTENT_JAVASCRIPT);
       break;
 
     case HTTP_CONTENT_HTML:
-      rval = x_http2_server_JS_transmit(s, source, conn, HTTP_CONTENT_HTML);
+      rval = http_server_JS_transmit(this, source, conn, HTTP_CONTENT_HTML);
       break;
 
     case HTTP_CONTENT_PDF:
-      rval = x_http2_server_PDF_transmit(s, source, conn);
+      rval = http_server_PDF_transmit(this, source, conn);
       break;
     }
 
-    if (rval == 0) downcast_steg(s)->have_transmitted = 1;
+    if (rval == 0) have_transmitted = 1;
     return rval;
   }
 }
@@ -714,8 +681,8 @@ x_http2_transmit(steg_t *s, struct evbuffer *source, conn_t *conn)
 
 
 
-int 
-x_http2_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
+int
+http_server_receive(http *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
 
   int cnt = 0;
   unsigned char* data;
@@ -760,24 +727,24 @@ x_http2_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct ev
 
     secondhalf = 0;
     c = 0;
-   
+
 
     while (strncmp((char*) p, "\r\n", 2) != 0 && (cookie_mode != 0 || p[0] != '.')) {
-      if (!secondhalf) 
-	c = 0;
-      if ('0' <= *p && *p <= '9') 
-	h = *p - '0';
-      else if ('a' <= *p && *p <= 'f') 
-	h = *p - 'a' + 10;
+      if (!secondhalf)
+        c = 0;
+      if ('0' <= *p && *p <= '9')
+        h = *p - '0';
+      else if ('a' <= *p && *p <= 'f')
+        h = *p - 'a' + 10;
       else {
-	p++;
-	continue;
+        p++;
+        continue;
       }
 
       c = (c << 4) + h;
       if (secondhalf) {
-	outbuf[sofar++] = c;
-	cnt++;
+        outbuf[sofar++] = c;
+        cnt++;
       }
       secondhalf = !secondhalf;
       p++;
@@ -795,15 +762,15 @@ x_http2_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct ev
     if (evbuffer_add(dest, outbuf, sofar)) {
       log_debug("Failed to transfer buffer");
       return RECV_BAD;
-    } 
+    }
     evbuffer_drain(source, s2.pos + sizeof("\r\n\r\n") - 1);
   } while (evbuffer_get_length(source));
-  
 
-  downcast_steg(s)->have_received = 1;
-  downcast_steg(s)->type = type;
+
+  s->have_received = 1;
+  s->type = type;
   //  fprintf(stderr, "SERVER RECEIVED payload %d %d\n", cnt, type);
-    
+
   conn_transmit_soon(conn, 100);
   return RECV_GOOD;
 }
@@ -818,40 +785,37 @@ x_http2_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct ev
 
 
 
-static int
-x_http2_receive(steg_t *s, conn_t *conn, struct evbuffer *dest)
+int
+http::receive(conn_t *conn, struct evbuffer *dest)
 {
   struct evbuffer *source = conn_get_inbound(conn);
   // unsigned int type;
   int rval = RECV_BAD;
 
 
-  if (s->is_clientside) {
-
-    //    fprintf(stderr, "client type = %d\n", downcast_steg(s)->type);
+  if (is_clientside) {
+    switch(type) {
 
-    switch(downcast_steg(s)->type) {
-      
-    case HTTP_CONTENT_SWF: 
-      rval = x_http2_handle_client_SWF_receive(s, conn, dest, source);
+    case HTTP_CONTENT_SWF:
+      rval = http_handle_client_SWF_receive(this, conn, dest, source);
       break;
 
     case HTTP_CONTENT_JAVASCRIPT:
     case HTTP_CONTENT_HTML:
-      rval = x_http2_handle_client_JS_receive(s, conn, dest, source);
+      rval = http_handle_client_JS_receive(this, conn, dest, source);
       break;
 
     case HTTP_CONTENT_PDF:
-      rval = x_http2_handle_client_PDF_receive(s, conn, dest, source);
+      rval = http_handle_client_PDF_receive(this, conn, dest, source);
       break;
     }
 
-    if (rval == RECV_GOOD) downcast_steg(s)->have_received = 1;
+    if (rval == RECV_GOOD) have_received = 1;
     return rval;
 
   } else {
-    return x_http2_server_receive(s, conn, dest, source);
+    return http_server_receive(this, conn, dest, source);
   }
 
-   
+
 }
diff --git a/src/steg/jsSteg.cc b/src/steg/jsSteg.cc
index 1486255..c02a7b0 100644
--- a/src/steg/jsSteg.cc
+++ b/src/steg/jsSteg.cc
@@ -707,7 +707,7 @@ int testDecode2(char *inBuf, char *outBuf,
 
 
 int 
-x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, unsigned int content_type) {
+http_server_JS_transmit (steg_t*, struct evbuffer *source, conn_t *conn, unsigned int content_type) {
 
   struct evbuffer_iovec *iv;
   int nv;
@@ -734,7 +734,7 @@ x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, un
   // evbuffer_dump(source, stderr);
 
   nv = evbuffer_peek(source, sbuflen, NULL, NULL, 0);
-  iv = xzalloc(sizeof(struct evbuffer_iovec) * nv);
+  iv = (evbuffer_iovec *)xzalloc(sizeof(struct evbuffer_iovec) * nv);
 
   if (evbuffer_peek(source, sbuflen, NULL, iv, nv) != nv) {
     free(iv);
@@ -761,7 +761,7 @@ x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, un
   // Convert data in 'source' to hexadecimal and write it to data
   cnt = 0;
   for (i = 0; i < nv; i++) {
-    const unsigned char *p = iv[i].iov_base;
+    const unsigned char *p = (const unsigned char *)iv[i].iov_base;
     const unsigned char *limit = p + iv[i].iov_len;
     char c;
 
@@ -809,11 +809,7 @@ x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, un
 
   hLen = hend+4-jsTemplate;
   cLen = jsLen - hLen;
-  outbuf = malloc(cLen);
-  if (outbuf == NULL) {
-    log_warn("malloc for outbuf fails");
-    return -1;
-  }
+  outbuf = (char *)xmalloc(cLen);
 
   r = encodeHTTPBody(data, hend+4, outbuf, datalen, cLen, cLen, mode);
 
@@ -826,11 +822,7 @@ x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, un
   if (gzipMode == 1) {
     // conservative estimate:
     // sizeof outbuf2 = cLen + 10-byte for gzip header + 8-byte for crc 
-    outbuf2 = malloc(cLen+18);  
-    if (outbuf2 == NULL) {
-      log_warn("malloc for outbuf2 fails");
-      return -1;
-    }
+    outbuf2 = (char *)xmalloc(cLen+18);  
 
     outbuf2len = gzDeflate(outbuf, cLen, outbuf2, cLen+18, time(NULL));
 
@@ -893,7 +885,7 @@ x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, un
 
 
 int
-x_http2_handle_client_JS_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
+http_handle_client_JS_receive(steg_t *, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
   struct evbuffer_ptr s2;
   unsigned int response_len = 0;
   unsigned int content_len = 0;
diff --git a/src/steg/jsSteg.h b/src/steg/jsSteg.h
index 949aa25..8a351cc 100644
--- a/src/steg/jsSteg.h
+++ b/src/steg/jsSteg.h
@@ -62,10 +62,10 @@ int testDecode2(char *inBuf, char *outBuf,
 
 
 int 
-x_http2_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, unsigned int content_type);
+http_server_JS_transmit (steg_t* s, struct evbuffer *source, conn_t *conn, unsigned int content_type);
 
 int
-x_http2_handle_client_JS_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
+http_handle_client_JS_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
 
 
 
diff --git a/src/steg/payloads.cc b/src/steg/payloads.cc
index 2b82451..84bfd00 100644
--- a/src/steg/payloads.cc
+++ b/src/steg/payloads.cc
@@ -272,11 +272,11 @@ void load_payloads(const char* fname) {
     // }
 
     if (r < 0) {
-      payloads[payload_count] = malloc(pentry.length + 1);
+      payloads[payload_count] = (char *)xmalloc(pentry.length + 1);
       memcpy(payloads[payload_count], buf, pentry.length);
     } else {
       pentry.length = r;
-      payloads[payload_count] = malloc(pentry.length + 1);
+      payloads[payload_count] = (char *)xmalloc(pentry.length + 1);
       memcpy(payloads[payload_count], buf2, pentry.length);
     }
     payload_hdrs[payload_count] = pentry;
@@ -443,7 +443,7 @@ find_uri_type(char* buf_orig, int buflen) {
   char* uri;
   char* ext;
 
-  char* buf = malloc(buflen+1);
+  char* buf = (char *)xmalloc(buflen+1);
   char* uri_end;
 
 
@@ -524,7 +524,7 @@ find_uri_type(char* buf) {
 
   buf = strchr(buf, ' ') + 1;
   uri_len = strchr(buf, ' ') - buf;
-  uri = malloc(uri_len + 1);
+  uri = xmalloc(uri_len + 1);
 
   strncpy(uri, buf, uri_len);
   uri[uri_len] = 0;
@@ -1396,7 +1396,7 @@ int  init_PDF_payload_pool(int len, int type, int minCapacity) {
 
 
 
-int  init_SWF_payload_pool(int len, int type, int minCapacity) {
+int  init_SWF_payload_pool(int len, int type, int /*unused */) {
 
   // stat for usable payload
   int minPayloadSize = 0, maxPayloadSize = 0; 
@@ -1534,7 +1534,7 @@ int get_payload (int contentType, int cap, char** buf, int* size) {
 
 
 int
-find_content_length (char *hdr, int hlen) {
+find_content_length (char *hdr, int /*hlen*/) {
   char *clStart;
   char* clEnd;
   char *clValStart;
diff --git a/src/steg/pdfSteg.cc b/src/steg/pdfSteg.cc
index 81efdf4..d958b29 100644
--- a/src/steg/pdfSteg.cc
+++ b/src/steg/pdfSteg.cc
@@ -296,7 +296,7 @@ pdfUnwrap (char *data, unsigned int dlen,
 
 
 
-int x_http2_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn) {
+int http_server_PDF_transmit (steg_t*, struct evbuffer *source, conn_t *conn) {
 
   struct evbuffer *dest = conn_get_outbound(conn);
   size_t sbuflen = evbuffer_get_length(source);
@@ -321,7 +321,7 @@ int x_http2_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *con
   log_debug("Entering SERVER PDF transmit with sbuflen %d", (int)sbuflen);
 
   nv = evbuffer_peek(source, sbuflen, NULL, NULL, 0);
-  iv = xzalloc(sizeof(struct evbuffer_iovec) * nv);
+  iv = (evbuffer_iovec *)xzalloc(sizeof(struct evbuffer_iovec) * nv);
 
   if (evbuffer_peek(source, sbuflen, NULL, iv, nv) != nv) {
     free(iv);
@@ -330,7 +330,7 @@ int x_http2_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *con
 
   cnt = 0;
   for (i = 0; i < nv; i++) {
-    const unsigned char *p = iv[i].iov_base;
+    const unsigned char *p = (const unsigned char *)iv[i].iov_base;
     const unsigned char *limit = p + iv[i].iov_len;
     while (p < limit && cnt < (int)sbuflen) {
       data1[cnt++] = *p++;
@@ -430,7 +430,7 @@ int x_http2_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *con
 
 
 int
-x_http2_handle_client_PDF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
+http_handle_client_PDF_receive(steg_t *, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
   struct evbuffer_ptr s2;
   unsigned int response_len = 0, hdrLen;
   char outbuf[HTTP_MSG_BUF_SIZE];
diff --git a/src/steg/pdfSteg.h b/src/steg/pdfSteg.h
index 7e48449..3c7a4bd 100644
--- a/src/steg/pdfSteg.h
+++ b/src/steg/pdfSteg.h
@@ -21,9 +21,9 @@ int pdfUnwrap (char *data, unsigned int dlen, char *outbuf, unsigned int outbufs
 int addDelimiter(char *inbuf, int inbuflen, char *outbuf, int outbuflen, const char delimiter1, const char delimiter2);
 int removeDelimiter(char *inbuf, int inbuflen, char *outbuf, int outbuflen, const char delimiter1, int* endFlag, int* escape);
 
-int x_http2_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn);
+int http_server_PDF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn);
 int
-x_http2_handle_client_PDF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
+http_handle_client_PDF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
 
 #endif
 
diff --git a/src/steg/swfSteg.cc b/src/steg/swfSteg.cc
index ad3d5c8..8c3bd2e 100644
--- a/src/steg/swfSteg.cc
+++ b/src/steg/swfSteg.cc
@@ -57,22 +57,8 @@ swf_wrap(char* inbuf, int in_len, char* outbuf, int out_sz) {
   }
 
 
-  tmp_buf = malloc(in_len + SWF_SAVE_HEADER_LEN + SWF_SAVE_FOOTER_LEN);
-
-  if (tmp_buf == NULL) {
-    log_warn("swfsteg: malloc failed\n");
-    return -1;
-  }
-
-
-  tmp_buf2 = malloc(in_len + SWF_SAVE_HEADER_LEN + SWF_SAVE_FOOTER_LEN + 512);
-
-  if (tmp_buf2 == NULL) {
-    free(tmp_buf);
-    log_warn("swfsteg: malloc failed\n");
-    return -1;
-  }
-
+  tmp_buf = (char *)xmalloc(in_len + SWF_SAVE_HEADER_LEN + SWF_SAVE_FOOTER_LEN);
+  tmp_buf2 = (char *)xmalloc(in_len + SWF_SAVE_HEADER_LEN + SWF_SAVE_FOOTER_LEN + 512);
 
   memcpy(tmp_buf, swf+8, SWF_SAVE_HEADER_LEN);
   memcpy(tmp_buf+SWF_SAVE_HEADER_LEN, inbuf, in_len);
@@ -111,7 +97,7 @@ swf_unwrap(char* inbuf, int in_len, char* outbuf, int out_sz) {
   char* tmp_buf;
   int inf_len;
 
-  tmp_buf = malloc(in_len * 8);
+  tmp_buf = (char *)xmalloc(in_len * 8);
 
   inf_len = inf(inbuf + 8, in_len - 8, tmp_buf, in_len * 8); 
 
@@ -137,7 +123,7 @@ swf_unwrap(char* inbuf, int in_len, char* outbuf, int out_sz) {
 
 
 int 
-x_http2_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn) {
+http_server_SWF_transmit (steg_t*, struct evbuffer *source, conn_t *conn) {
 
   struct evbuffer *dest = conn_get_outbound(conn);
   size_t sbuflen = evbuffer_get_length(source);
@@ -145,29 +131,15 @@ x_http2_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn) {
   char* outbuf;
   int outlen;
 
+  inbuf = (char *)xmalloc(sbuflen);
 
-
-  inbuf = malloc(sbuflen);
-
-  if (inbuf == NULL) {
-    log_warn("malloc inbuf failed\n");
-    return -1;
-  }
-
-  
   if (evbuffer_remove(source, inbuf, sbuflen) == -1) {
-    log_debug("evbuffer_remove failed in x_http2_server_SWF_transmit");
+    log_debug("evbuffer_remove failed in http_server_SWF_transmit");
     return -1;
   }
 
-  outbuf = malloc(4*sbuflen + SWF_SAVE_FOOTER_LEN + SWF_SAVE_HEADER_LEN + 512);
+  outbuf = (char *)xmalloc(4*sbuflen + SWF_SAVE_FOOTER_LEN + SWF_SAVE_HEADER_LEN + 512);
 
-  if (outbuf == NULL) {
-    free(inbuf);
-    log_warn("malloc outbuf failed\n");
-    return -1;
-  }
-  
   //  fprintf(stderr, "server wrapping swf len %d\n", (int) sbuflen);
   outlen = swf_wrap(inbuf, sbuflen, outbuf, 4*sbuflen + SWF_SAVE_FOOTER_LEN + SWF_SAVE_HEADER_LEN + 512);
 
@@ -181,7 +153,7 @@ x_http2_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn) {
 
   
   if (evbuffer_add(dest, outbuf, outlen)) {
-    log_debug("SERVER ERROR: x_http2_server_transmit: evbuffer_add() fails for jsTemplate");
+    log_debug("SERVER ERROR: http_server_transmit: evbuffer_add() fails for jsTemplate");
     free(inbuf);
     free(outbuf);
     return -1;
@@ -201,7 +173,7 @@ x_http2_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn) {
 
 
 int
-x_http2_handle_client_SWF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
+http_handle_client_SWF_receive(steg_t *, conn_t *conn, struct evbuffer *dest, struct evbuffer* source) {
   struct evbuffer_ptr s2;
   unsigned int response_len = 0, hdrLen;
   char outbuf[HTTP_MSG_BUF_SIZE];
diff --git a/src/steg/swfSteg.h b/src/steg/swfSteg.h
index dc6bc04..7be5207 100644
--- a/src/steg/swfSteg.h
+++ b/src/steg/swfSteg.h
@@ -31,11 +31,11 @@ unsigned int
 swf_unwrap(char* inbuf, int in_len, char* outbuf, int out_sz);
 
 int 
-x_http2_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn);
+http_server_SWF_transmit (steg_t* s, struct evbuffer *source, conn_t *conn);
 
 
 int
-x_http2_handle_client_SWF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
+http_handle_client_SWF_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
 
 #endif
 
diff --git a/start-client.csh b/start-client.csh
deleted file mode 100644
index 65f4465..0000000
--- a/start-client.csh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/csh
-# ./obfsproxy --log-min-severity=debug x_dsteg socks 127.0.0.1:1080 x_http
-
-setenv EVENT_NOKQUEUE yes 
-#./obfsproxy --log-min-severity=debug chop socks 127.0.0.1:1080 127.0.0.1:8080 x_http2 127.0.0.1:8081 x_http2
-# ./obfsproxy --log-min-severity=warn chop socks 127.0.0.1:1080 127.0.0.1:8080 x_http2 127.0.0.1:8081 x_http2
-./obfsproxy --log-min-severity=error chop socks 127.0.0.1:1080 127.0.0.1:8080 x_http2 127.0.0.1:8081 x_http2
-
diff --git a/start-obfsproxy.sh b/start-obfsproxy.sh
deleted file mode 100755
index cc70c28..0000000
--- a/start-obfsproxy.sh
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/bin/bash
-
-ODIR=~/src/DEFIANCE/stegotorus
-
-################################################################################
-# helper functions:
-
-usage () {
-if [ $# -gt 0 ]; then
-    echo " *** ERROR: $1"
-fi
-cat << EOF
-
-usage: $0 <OPTIONS> [server|client] [install-dir]
-
-Start obfsproxy server or client with given options. If the optional install-dir
-is given, override the value set in the script.
-
-OPTIONS:
-   -h             Show this message
-   -i <addr>      IP address (default: 127.0.0.1)
-   -p <n>         port number (default: 8080)
-   -l <severity>  Log severity: warn, error, debug (default: error)
-   -b <host>      Host name (or IP address) of Tor Bridge
-                  with port number attached via ':' or omitted
-                  (default: 87.73.82.145:8080)
-   -n <n>         Multiply the number of IP addresses on the client
-EOF
-}
-
-################################################################################
-# parse command line:
-
-# default values:
-IP=127.0.0.1
-PORT=8080
-N=1
-LOG=error
-BRIDGE_IP=87.73.82.145
-BRIDGE_PORT=8080
-while getopts "hi:p:l:b:n:" OPTION
-do
-    case $OPTION in
-        h|\?)
-            usage; exit 1
-            ;;
-        i)
-            IP=$OPTARG
-            ;;
-        p)
-            PORT=$OPTARG
-            ;;
-	n)
-	    N=$OPTARG
-	    ;;
-	l)
-	    LOG=`echo $OPTARG | tr '[A-Z]' '[a-z]'`  # make lower case
-	    ;;
-	b)
-	    arr=(${OPTARG//:/ })
-	    BRIDGE_IP=${arr[0]}
-	    if [ ${#arr[@]} -gt 1 ]; then
-		BRIDGE_PORT=${arr[1]}
-	    fi
-	    ;;
-    esac
-    shift $((OPTIND-1)); OPTIND=1 
-done
-
-# test if $LOG is valid
-case $LOG in
-    debug|warn|error)
-	;;
-    *) 
-	usage "Unknown log level given: $LOG"; exit 1
-	;;
-esac
-
-# now $@ has remaining arguments:
-if [ $# -lt 1 ]; then
-    usage "need 'server' or 'client' as argument"; exit 1
-fi
-TYPE=`echo $1 | tr '[A-Z]' '[a-z]'`  # turn argument into lower case
-case $TYPE in
-    server|client)
-	;;
-    *)
-	usage "argument $1 not recognized"; exit 1
-	;;
-esac
-
-# check optional install location given as an argument
-if [ $# -gt 1 ]; then
-    if [[ ! -d $2 ]]; then
-	usage "argument $2 is not a directory"; exit 1
-    fi
-    if [[ ! -x $2/obfsproxy ]]; then
-	usage "directory $2 does not contain executable of 'obfsproxy'"; exit 1
-    fi
-    ODIR=$2
-fi
-
-################################################################################
-# start obfsproxy
-
-echo "Using obfsproxy in \"$ODIR\""
-cd $ODIR
-export EVENT_NOKQUEUE=yes
-case $TYPE in
-    server)
-	./obfsproxy --log-min-severity=$LOG chop server $BRIDGE_IP:$BRIDGE_PORT $IP:$PORT
-	;;
-    client)
-	IPS=""
-	for (( c=1; c<=$N; c++)) ; do 
-	    IPS="${IPS}${IP}:${PORT} x_http2 " ;
-	done
-	./obfsproxy --log-min-severity=$LOG chop socks 127.0.0.1:1080 $IPS
-	;;
-esac
diff --git a/start-server.csh b/start-server.csh
deleted file mode 100644
index b7d61e6..0000000
--- a/start-server.csh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/csh
-setenv EVENT_NOKQUEUE yes 
-# ./obfsproxy --log-min-severity=debug chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
-# ./obfsproxy --log-min-severity=warn chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
-./obfsproxy --log-min-severity=error chop server 87.73.82.145:8080 127.0.0.1:8080 127.0.0.1:8081
-
diff --git a/torrc b/torrc
deleted file mode 100644
index ff27e61..0000000
--- a/torrc
+++ /dev/null
@@ -1,12 +0,0 @@
-SocksPort 9060 # what port to open for local application connections
-SocksListenAddress 127.0.0.1 # accept connections only from localhost
-
-SafeLogging 0
-Log info file ./info.log
-Log debug file ./debug.log
-
-Socks4Proxy 127.0.0.1:1080
-
-# Bridge 87.73.82.145:8080
-Bridge 127.0.0.1:8080
-UseBridges 1





More information about the tor-commits mailing list