From 109f39e09630409a30a9f4e8183f539c499f07ba Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Mon, 3 Jun 2024 04:06:21 +0200 Subject: improved (v)conn init / open / init vlink / open vlink API; implemented randezvous hashing --- ecp/test/vconn_inb.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 ecp/test/vconn_inb.c (limited to 'ecp/test/vconn_inb.c') diff --git a/ecp/test/vconn_inb.c b/ecp/test/vconn_inb.c new file mode 100644 index 0000000..7701a2d --- /dev/null +++ b/ecp/test/vconn_inb.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "init_vconn.h" + +ECPContext ctx; +ECPSocket sock; +ECPConnHandler handler; +ECPConnHandler vconn_handler; +ECPConnHandler vlink_handler; +ECPConnHandler dir_handler; +ECPConnection dir_conn; +ECPVConnOutb vconn[ECP_MAX_PARENT]; + +#define CTYPE_TEST 0 +#define MTYPE_MSG 0 + +static int handle_open(ECPConnection *conn, ECP2Buffer *b) { + printf("OPEN\n"); + + return ECP_OK; +} + +static ssize_t handle_msg(ECPConnection *conn, ecp_seq_t seq, unsigned char mtype, unsigned char *msg, size_t msg_size, ECP2Buffer *b) { + char *_msg = "VAISTINU JE CAR!"; + ssize_t rv; + + printf("MSG:%s size:%ld\n", msg, msg_size); + rv = ecp_msg_send(conn, MTYPE_MSG, (unsigned char *)_msg, strlen(_msg)+1); + + return msg_size; +} + +static void handle_dir_list(ECPSocket *sock, ECPDirList *dir_list, int err) { + ecp_tr_addr_t addr; + ecp_ecdh_public_t vconn_pub[ECP_MAX_PARENT]; + ssize_t _rv, vconn_size; + int rv; + + LOG("handle_dir_list", err); + + _rv = ecp_dir_hrw_select(dir_list, &sock->key_perma.public, vconn_pub, ECP_MAX_PARENT, &addr); + LOG("ecp_dir_hrw_select", (int)_rv); + + vconn_size = _rv; + ecp_vconn_init_vlink(vconn, vconn_size, sock); + rv = ecp_vconn_open_vlink(vconn, vconn_pub, &addr); + LOG("ecp_vconn_open_vlink", rv); + + ecp_dir_list_destroy(dir_list); +} + +static void usage(char *arg) { + fprintf(stderr, "Usage: %s
\n", arg); + exit(1); +} + +int main(int argc, char *argv[]) { + ECPDHKey key_perma; + ecp_tr_addr_t addr; + ecp_ecdh_public_t public; + int rv; + + if (argc != 4) usage(argv[0]); + + rv = ecp_init(&ctx, &vconn_handler, &vlink_handler); + LOG("ecp_init", rv); + + rv = ecp_dir_set_handler(&ctx, &dir_handler, handle_dir_list); + LOG("ecp_dir_set_handler", rv); + + ecp_conn_handler_init(&handler, handle_open, NULL, handle_msg, NULL); + ecp_ctx_set_handler(&ctx, CTYPE_TEST, &handler); + + rv = ecp_util_load_key(argv[1], &key_perma.public, &key_perma.private); + LOG("ecp_util_load_key", rv); + key_perma.valid = 1; + + rv = ecp_sock_create(&sock, &ctx, &key_perma); + LOG("ecp_sock_create", rv); + + rv = ecp_vconn_sock_create(&sock); + LOG("ecp_vconn_sock_create", rv); + + rv = ecp_sock_open(&sock, NULL); + LOG("ecp_sock_open", rv); + + rv = ecp_start_receiver(&sock); + LOG("ecp_start_receiver", rv); + + rv = ecp_addr_init(&addr, argv[2]); + LOG("ecp_addr_init", rv); + + rv = ecp_util_load_key(argv[3], &public, NULL); + LOG("ecp_util_load_key", rv); + + rv = ecp_dir_get(&dir_conn, &sock, &public, &addr, 0); + LOG("ecp_dir_get", rv); + + while(1) pause(); +} -- cgit v1.2.3