summaryrefslogtreecommitdiff
path: root/code/proxy/proxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'code/proxy/proxy.c')
-rw-r--r--code/proxy/proxy.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/code/proxy/proxy.c b/code/proxy/proxy.c
index 4da0acb..bc87a0c 100644
--- a/code/proxy/proxy.c
+++ b/code/proxy/proxy.c
@@ -19,7 +19,7 @@ static ECPConnHandler handler_b;
static int proxyf_create(ECPConnection *conn, unsigned char *payload, size_t size) {
ECPContext *ctx = conn->sock->ctx;
ECPConnProxyF *conn_p = (ECPConnProxyF *)conn;
- int rv;
+ int rv = ECP_OK;
if (conn->out) return ECP_ERR;
if (conn->type != ECP_CTYPE_PROXYF) return ECP_ERR;
@@ -34,13 +34,14 @@ static int proxyf_create(ECPConnection *conn, unsigned char *payload, size_t siz
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&key_next_mutex);
#endif
+#ifdef ECP_WITH_HTABLE
rv = ctx->ht.init ? ctx->ht.insert(key_next_table, conn_p->key_next[conn_p->key_next_curr], conn) : ECP_ERR;
+#endif
#ifdef ECP_WITH_PTHREAD
pthread_mutex_unlock(&key_next_mutex);
#endif
- if (rv) return rv;
-
- return ECP_OK;
+
+ return rv;
}
static void proxyf_destroy(ECPConnection *conn) {
@@ -54,12 +55,14 @@ static void proxyf_destroy(ECPConnection *conn) {
pthread_mutex_lock(&key_next_mutex);
pthread_mutex_lock(&conn->mutex);
#endif
+#ifdef ECP_WITH_HTABLE
if (ctx->ht.init) {
int i;
for (i=0; i<ECP_MAX_NODE_KEY; i++) {
if (memcmp(conn_p->key_next[i], key_null, ECP_ECDH_SIZE_KEY)) ctx->ht.remove(key_next_table, conn_p->key_next[i]);
}
}
+#endif
#ifdef ECP_WITH_PTHREAD
pthread_mutex_unlock(&conn->mutex);
pthread_mutex_unlock(&key_next_mutex);
@@ -136,11 +139,15 @@ static ssize_t proxyf_handle_open(ECPConnection *conn, ecp_seq_t seq, unsigned c
if (!ecp_conn_is_open(conn)) conn->flags |= ECP_CONN_FLAG_OPEN;
if (memcmp(conn_p->key_next[conn_p->key_next_curr], msg, ECP_ECDH_SIZE_KEY)) {
conn_p->key_next_curr = (conn_p->key_next_curr + 1) % ECP_MAX_NODE_KEY;
- if (memcmp(conn_p->key_next[conn_p->key_next_curr], key_null, ECP_ECDH_SIZE_KEY)) {
- if (ctx->ht.init) ctx->ht.remove(key_next_table, conn_p->key_next[conn_p->key_next_curr]);
+#ifdef ECP_WITH_HTABLE
+ if (ctx->ht.init) {
+ if (memcmp(conn_p->key_next[conn_p->key_next_curr], key_null, ECP_ECDH_SIZE_KEY)) ctx->ht.remove(key_next_table, conn_p->key_next[conn_p->key_next_curr]);
+ rv = ctx->ht.insert(key_next_table, conn_p->key_next[conn_p->key_next_curr], conn);
+ } else {
+ rv = ECP_ERR;
}
- memcpy(conn_p->key_next[conn_p->key_next_curr], msg, ECP_ECDH_SIZE_KEY);
- rv = ctx->ht.init ? ctx->ht.insert(key_next_table, conn_p->key_next[conn_p->key_next_curr], conn) : ECP_ERR;
+#endif
+ if (!rv) memcpy(conn_p->key_next[conn_p->key_next_curr], msg, ECP_ECDH_SIZE_KEY);
}
#ifdef ECP_WITH_PTHREAD
@@ -172,7 +179,9 @@ static ssize_t proxyf_handle_relay(ECPConnection *conn, ecp_seq_t seq, unsigned
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&key_perma_mutex);
#endif
+#ifdef ECP_WITH_HTABLE
conn_out = ctx->ht.init ? ctx->ht.search(key_perma_table, conn_p->key_out) : NULL;
+#endif
if (conn_out) {
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&conn_out->mutex);
@@ -205,13 +214,15 @@ static ssize_t proxyf_handle_relay(ECPConnection *conn, ecp_seq_t seq, unsigned
}
static int proxyb_insert(ECPConnection *conn) {
- int rv;
+ int rv = ECP_OK;
ECPContext *ctx = conn->sock->ctx;
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&key_perma_mutex);
#endif
- rv = ctx->ht.init ? ctx->ht.insert(key_perma_table, ctx->cr.dh_pub_get_buf(&conn->node.public), conn) : ECP_ERR;
+#ifdef ECP_WITH_HTABLE
+ rv = ctx->ht.init ? ctx->ht.insert(key_perma_table, ctx->cr.dh_pub_get_buf(&conn->node.public), conn) : ECP_OK;
+#endif
#ifdef ECP_WITH_PTHREAD
pthread_mutex_unlock(&key_perma_mutex);
#endif
@@ -225,7 +236,9 @@ static void proxyb_remove(ECPConnection *conn) {
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&key_perma_mutex);
#endif
+#ifdef ECP_WITH_HTABLE
if (ctx->ht.init) ctx->ht.remove(key_perma_table, ctx->cr.dh_pub_get_buf(&conn->node.public));
+#endif
#ifdef ECP_WITH_PTHREAD
pthread_mutex_unlock(&key_perma_mutex);
#endif
@@ -328,7 +341,9 @@ static ssize_t proxyb_handle_relay(ECPConnection *conn, ecp_seq_t seq, unsigned
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&key_next_mutex);
#endif
+#ifdef ECP_WITH_HTABLE
conn = ctx->ht.init ? ctx->ht.search(key_next_table, msg+ECP_SIZE_PROTO+1) : NULL;
+#endif
if (conn) {
#ifdef ECP_WITH_PTHREAD
pthread_mutex_lock(&conn->mutex);
@@ -460,11 +475,13 @@ int ecp_proxy_init(ECPContext *ctx) {
pthread_mutex_init(&key_next_mutex, NULL);
#endif
+#ifdef ECP_WITH_HTABLE
if (ctx->ht.init) {
key_perma_table = ctx->ht.create(ctx);
key_next_table = ctx->ht.create(ctx);
}
-
+#endif
+
return ECP_OK;
}