#include #include #include #include #include #include #include #include "init_vconn.h" ECPContext ctx; ECPSocket sock; ECPConnection conn; ECPConnHandler vconn_handler; ECPConnHandler vlink_handler; static void usage(char *arg) { fprintf(stderr, "Usage: %s [ ]\n", arg); exit(1); } static int vlink_handle_open(ECPConnection *_conn, ECP2Buffer *bufs) { int rv; /* open return connection */ if ((_conn->parent == NULL) && ecp_conn_is_inb(_conn) && (memcmp(&_conn->remote.key_perma.public, &conn.remote.key_perma.public, sizeof(conn.remote.key_perma.public)) != 0)) { ECPConnection *conn_r; conn_r = malloc(sizeof(ECPConnection)); if (conn_r == NULL) return ECP_ERR_ALLOC; ecp_vlink_init(conn_r, _conn->sock); rv = ecp_conn_open(conn_r, &_conn->remote.key_perma.public, &_conn->remote.addr); printf("open return connection: ecp_conn_open RV:%d\n", rv); if (rv) return rv; } rv = ecp_vlink_handle_open(_conn, bufs); return rv; } int main(int argc, char *argv[]) { ecp_tr_addr_t addr; ECPDHKey key_perma; int rv; if ((argc < 3) || (argc > 5)) usage(argv[0]); rv = ecp_init(&ctx, &vconn_handler, &vlink_handler); LOG("ecp_init", rv); vlink_handler.handle_open = vlink_handle_open; rv = ecp_util_load_key(argv[2], &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_addr_init(&addr, argv[1]); LOG("ecp_addr_init", rv); rv = ecp_sock_open(&sock, &addr); LOG("ecp_sock_open", rv); rv = ecp_start_receiver(&sock); LOG("ecp_start_receiver", rv); if (argc == 5) { ecp_ecdh_public_t public; rv = ecp_addr_init(&addr, argv[3]); LOG("ecp_addr_init", rv); rv = ecp_util_load_key(argv[4], &public, NULL); LOG("ecp_util_load_key", rv); ecp_vlink_init(&conn, &sock); rv = ecp_conn_open(&conn, &public, &addr); LOG("ecp_conn_open", rv); } else { memset(&conn, 0, sizeof(conn)); } while (1) sleep(1); }