[tor-commits] [obfsproxy/master] * Abstracted the protocol interface more by adding proto_<operation>() functions.

nickm at torproject.org nickm at torproject.org
Wed Apr 27 00:17:45 UTC 2011


commit 71eff4394b01cf19c08b7d504574d425199bcd71
Author: George Kadianakis <desnacked at gmail.com>
Date:   Thu Mar 17 16:41:47 2011 +0100

    * Abstracted the protocol interface more by adding proto_<operation>() functions.
---
 src/network.c  |   17 ++++++++---------
 src/protocol.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/protocol.h |   15 ++++++++++++---
 3 files changed, 66 insertions(+), 14 deletions(-)

diff --git a/src/network.c b/src/network.c
index b6dadd7..9350a61 100644
--- a/src/network.c
+++ b/src/network.c
@@ -122,10 +122,9 @@ simple_listener_cb(struct evconnlistener *evcl,
   conn->mode = lsn->mode;
   conn->proto = lsn->proto;
 
-  /* ASN Is this actually modular. Will all protocols need to init here?
-     I don't think so. I don't know. */
+  /* Will all protocols need to _init() here? Don't think so! */
   int is_initiator = (conn->mode != LSN_SIMPLE_SERVER) ? 1 : 0;
-  conn->proto->state = lsn->proto->init(&is_initiator);
+  conn->proto->state = proto_init(conn->proto, &is_initiator);
 
   if (!conn->proto->state)
     goto err;
@@ -178,9 +177,9 @@ simple_listener_cb(struct evconnlistener *evcl,
   struct bufferevent *encrypted =
     conn->mode == LSN_SIMPLE_SERVER ? conn->input : conn->output;
 
-  /* ASN Send handshake */
-  if (lsn->proto->handshake(conn->proto->state,
-                            bufferevent_get_output(encrypted))<0)
+  /* ASN Will all protocols need to handshake here? Don't think so. */
+  if (proto_handshake(conn->proto,
+                      bufferevent_get_output(encrypted))<0)
     goto err;
 
   if (conn->mode == LSN_SIMPLE_SERVER || conn->mode == LSN_SIMPLE_CLIENT) {
@@ -205,7 +204,7 @@ static void
 conn_free(conn_t *conn)
 {
   if (conn->proto->state)
-    conn->proto->destroy((void *)conn->proto->state);
+    proto_destroy(conn->proto->state);
   if (conn->socks_state)
     socks_state_free(conn->socks_state);
   if (conn->input)
@@ -280,7 +279,7 @@ plaintext_read_cb(struct bufferevent *bev, void *arg)
   other = (bev == conn->input) ? conn->output : conn->input;
 
   dbg(("Got data on plaintext side\n"));
-  if (conn->proto->send(conn->proto->state,
+  if (proto_send(conn->proto,
                  bufferevent_get_input(bev),
                  bufferevent_get_output(other)) < 0)
     conn_free(conn);
@@ -294,7 +293,7 @@ obfsucated_read_cb(struct bufferevent *bev, void *arg)
   other = (bev == conn->input) ? conn->output : conn->input;
 
   dbg(("Got data on encrypted side\n"));
-  if (conn->proto->recv(conn->proto->state,
+  if (proto_recv(conn->proto,
                  bufferevent_get_input(bev),
                  bufferevent_get_output(other)) < 0)
     conn_free(conn);
diff --git a/src/protocol.c b/src/protocol.c
index c186857..9fda4b0 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -1,5 +1,6 @@
-#include "stdlib.h"
-#include "stdio.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
 
 #include "protocol.h"
 #include "crypt.h"
@@ -29,3 +30,46 @@ set_up_protocol(int protocol) {
 
   return proto;
 }
+
+void *
+proto_init(struct protocol_t *proto, void *arg) {
+  assert(proto);
+  if (proto->init)
+    return proto->init(arg);
+  else
+    return NULL;
+}
+
+int
+proto_handshake(struct protocol_t *proto, void *buf) {
+  assert(proto);
+  if (proto->handshake)
+    return proto->handshake(proto->state, buf);
+  else
+    return -1;
+}
+
+int
+proto_send(struct protocol_t *proto, void *source, void *dest) {
+  assert(proto);
+  if (proto->send)
+    return proto->send(proto->state, source, dest);
+  else
+    return -1;
+}
+
+int
+proto_recv(struct protocol_t *proto, void *source, void *dest) {
+  assert(proto);
+  if (proto->recv)
+    return proto->recv(proto->state, source, dest);
+  else
+    return -1;
+}
+
+void proto_destroy(struct protocol_t *proto) {
+  assert(proto);
+
+  if (proto->destroy)
+    proto->destroy(proto->state);
+}
diff --git a/src/protocol.h b/src/protocol.h
index 159f3e3..4de5c70 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -5,22 +5,31 @@
 #define BRL_PROTOCOL      1
 
 struct protocol_t *set_up_protocol(int protocol);
+void *proto_init(struct protocol_t *proto, void *arg);
+void proto_destroy(struct protocol_t *proto);
+int proto_handshake(struct protocol_t *proto, void *buf);
+int proto_send(struct protocol_t *proto, void *source, void *dest);
+int proto_recv(struct protocol_t *proto, void *source, void *dest);
 
-/* ASN */
+
+
+/* ASN Why the hell do half of them return int? FIXME */
 struct protocol_t {
   /* Constructor: creates the protocol; sets up functions etc. */
   void *(*new)(struct protocol_t *self);
   /* Destructor */
-  void (*destroy)(void *arg);
+  void (*destroy)(void *state);
 
   /* does nessesary initiation steps; like build a proto state etc. */
   void *(*init)(void *arg);
 
   /* does handshake. Supposedly all protocols have a handshake. */
-  void *(*handshake)(void *state, void *buf);
+  int (*handshake)(void *state, void *buf);
+
   /* send data function */
   int (*send)(void *state, void *source,
               void *dest);
+
   /* receive data function */
   int (*recv)(void *state, void *source,
               void *dest);





More information about the tor-commits mailing list