From 3ef6719f47b734b12c0b11c725b7f12e3fb3c08a Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Tue, 23 May 2017 14:19:26 +0200 Subject: fs layout updated --- code/core/htable/htable.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 code/core/htable/htable.c (limited to 'code/core/htable/htable.c') diff --git a/code/core/htable/htable.c b/code/core/htable/htable.c new file mode 100644 index 0000000..4a9ee11 --- /dev/null +++ b/code/core/htable/htable.c @@ -0,0 +1,57 @@ +#include + +#include + +#include "hashtable.h" +#include "hashtable_private.h" + +static unsigned int hash_fn(void *k) { + return *((unsigned int *)k); +} + +static int eq_fn(void *k1, void *k2) { + return !memcmp(k1, k2, ECP_ECDH_SIZE_KEY); +} + +static void *h_create(ECPContext *ctx) { + int rv; + struct hashtable *h = malloc(sizeof(struct hashtable)); + if (h == NULL) return NULL; + + rv = create_hashtable(h, 1000, (unsigned int (*)(void *))ctx->cr.dh_pub_hash_fn, (int (*)(void *, void *))ctx->cr.dh_pub_hash_eq, NULL, NULL, NULL); + if (!rv) { + free(h); + return NULL; + } + + return h; +} + +static void h_destroy(void *h) { + hashtable_destroy(h); + free(h); +} + +static int h_insert(void *h, unsigned char *k, ECPConnection *v) { + int rv = hashtable_insert(h, k, v); + if (!rv) return ECP_ERR; + return ECP_OK; +} + +static ECPConnection *h_remove(void *h, unsigned char *k) { + return hashtable_remove(h, k); +} + +static ECPConnection *h_search(void *h, unsigned char *k) { + return hashtable_search(h, k); +} + +int ecp_htable_init(ECPHTableIface *h) { + h->init = 1; + h->create = h_create; + h->destroy = h_destroy; + h->insert = h_insert; + h->remove = h_remove; + h->search = h_search; + return 0; +} -- cgit v1.2.3