From 810dde21ee65653c15606917b19566cfbaaf165e Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Tue, 9 Aug 2022 21:54:45 +0200 Subject: ecp server added --- ecp/test/vc_inb.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 ecp/test/vc_inb.c (limited to 'ecp/test/vc_inb.c') diff --git a/ecp/test/vc_inb.c b/ecp/test/vc_inb.c new file mode 100644 index 0000000..13b493c --- /dev/null +++ b/ecp/test/vc_inb.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "init_vconn.h" +#include "vc_common.h" + +ECPContext ctx; +ECPSocket sock; +ECPConnHandler handler; +ECPConnHandler dir_handler; +ECPConnHandler vconn_handler; +ECPConnHandler vlink_handler; + +#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 ssize_t handle_dir_msg(ECPConnection *conn, ecp_seq_t seq, unsigned char mtype, unsigned char *msg, size_t msg_size, ECP2Buffer *b) { + size_t rsize; + uint16_t count; + ECPConnection *vlink; + int rv; + + if (msg_size < sizeof(uint16_t)) return ECP_ERR_SIZE; + + count = \ + ((uint16_t)msg[0] << 8) | \ + ((uint16_t)msg[1]); + + printf("DIR MSG:%d\n", count); + + rsize = sizeof(uint16_t) + count * ECP_SIZE_DIR_ITEM; + if (msg_size < rsize) return ECP_ERR_SIZE; + + msg += sizeof(uint16_t); + + vlink = malloc(sizeof(ECPConnection)); + if (vlink == NULL) return ECP_ERR_ALLOC; + + ecp_vlink_init(vlink, conn->sock); + rv = vc_open_inb(vlink, msg, count, &conn->sock->key_perma.public); + if (rv) { + free(vlink); + return rv; + } + + return rsize; +} + +static void usage(char *arg) { + fprintf(stderr, "Usage: %s \n", arg); + exit(1); +} + +int main(int argc, char *argv[]) { + ECPConnection *conn_dir; + ECPNode node_dir; + ecp_ecdh_public_t dir_pub; + ECPDHKey key_perma; + int rv; + + if (argc != 4) usage(argv[0]); + + rv = ecp_init(&ctx, &vconn_handler, &vlink_handler); + printf("ecp_init RV:%d\n", rv); + + ecp_conn_handler_init(&dir_handler, handle_dir_msg, ecp_dir_handle_open, NULL, NULL); + ecp_ctx_set_handler(&ctx, ECP_CTYPE_DIR, &dir_handler); + + ecp_conn_handler_init(&handler, handle_msg, handle_open, NULL, NULL); + ecp_ctx_set_handler(&ctx, CTYPE_TEST, &handler); + + rv = ecp_util_load_key(&key_perma.public, &key_perma.private, argv[1]); + printf("ecp_util_load_key RV:%d\n", rv); + key_perma.valid = 1; + + rv = ecp_sock_create(&sock, &ctx, &key_perma); + printf("ecp_sock_create RV:%d\n", rv); + + rv = ecp_sock_open(&sock, NULL); + printf("ecp_sock_open RV:%d\n", rv); + + rv = ecp_start_receiver(&sock); + printf("ecp_start_receiver RV:%d\n", rv); + + rv = ecp_util_load_pub(&dir_pub, argv[2]); + printf("ecp_util_load_pub RV:%d\n", rv); + + ecp_node_init(&node_dir, &dir_pub, NULL); + rv = ecp_node_set_addr(&node_dir, argv[3]); + printf("ecp_node_set_addr RV:%d\n", rv); + + conn_dir = malloc(sizeof(ECPConnection)); + if (conn_dir == NULL) printf("out of memory\n"); + + ecp_dir_conn_init(conn_dir, &sock); + rv = ecp_conn_open(conn_dir, &node_dir); + printf("ecp_conn_open RV:%d\n", rv); + + while (1) sleep(1); +} -- cgit v1.2.3