#include #include #include #include #include #include #include #include #include ECPContext ctx; ECPSocket sock; ECPConnection conn; ECPConnHandler dir_handler; #define LOG(fmt, rv) { printf(fmt " RV:%d\n", rv); if (rv<0) exit(1); } static void handle_err(ECPConnection *conn, unsigned char mtype, int err) { printf("ERROR: CTYPE:0x%x MTYPE:0x%x ERR:%d\n", conn->type, mtype, err); } static void print_list(ECPConnection *conn, void *list, int err) { ECPDirList *dir_list = list; unsigned char *host; uint16_t port; int i; LOG("print_list", err); printf("DIR LIST COUNT:%d\n", dir_list->count); for (i=0; icount; i++) { host = dir_list->items[i].node.addr.host; port = dir_list->items[i].node.addr.port; printf("ADDR: %d.%d.%d.%d:%d\n", host[0], host[1], host[2], host[3], ntohs(port)); } 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[]) { ecp_tr_addr_t addr; ecp_ecdh_public_t public; int rv; if (argc != 3) usage(argv[0]); rv = ecp_ctx_init(&ctx, NULL, NULL, NULL, handle_err, printf); LOG("ecp_ctx_init", rv); rv = ecp_dir_set_handler(&ctx, &dir_handler, print_list); LOG("ecp_dir_set_handler", rv); rv = ecp_sock_create(&sock, &ctx, NULL); LOG("ecp_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[1]); LOG("ecp_addr_init", rv); rv = ecp_util_load_key(argv[2], &public, NULL); LOG("ecp_util_load_key", rv); rv = ecp_dir_get(&conn, &sock, &public, &addr, 0); LOG("ecp_dir_get", rv); while(1) pause(); }