From 9deafe7ce81e845748e15392523f9167cf65b1bd Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Fri, 18 May 2018 10:48:30 -0400 Subject: [PATCH] more --- daemon.ini | 2 +- llarp/ev_epoll.hpp | 2 -- llarp/iwp_link.cpp | 40 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/daemon.ini b/daemon.ini index a2f1fbe91..68d5d28c0 100644 --- a/daemon.ini +++ b/daemon.ini @@ -4,6 +4,6 @@ threads=1 [netdb] dir=./tmp-nodes -[dtls-links] +[iwp-links] lo=1090 #lo=eth diff --git a/llarp/ev_epoll.hpp b/llarp/ev_epoll.hpp index 26be71574..b3184eb55 100644 --- a/llarp/ev_epoll.hpp +++ b/llarp/ev_epoll.hpp @@ -105,14 +105,12 @@ struct llarp_epoll_loop : public llarp_ev_loop { } bool udp_listen(llarp_udp_io* l) { - printf("udp_listen()\n"); int fd = udp_bind(&l->addr); if (fd == -1) return false; llarp::udp_listener* listener = new llarp::udp_listener(fd, l); epoll_event ev; ev.data.ptr = listener; ev.events = EPOLLIN; - printf("epoll_ctl()\n"); if (epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &ev) == -1) { delete listener; return false; diff --git a/llarp/iwp_link.cpp b/llarp/iwp_link.cpp index b8e4c97a3..943d6bba0 100644 --- a/llarp/iwp_link.cpp +++ b/llarp/iwp_link.cpp @@ -1,8 +1,9 @@ #include #include - +#include #include + #include "crypto.hpp" #include "fs.hpp" #include "net.hpp" @@ -18,6 +19,7 @@ struct server { struct llarp_alloc * mem; struct llarp_logic * logic; + struct llarp_crypto * crypto; struct llarp_ev_loop * netloop; struct llarp_msg_muxer * muxer; struct llarp_udp_io udp; @@ -25,6 +27,8 @@ struct server uint32_t timeout_job_id; std::map sessions; + llarp_seckey_t seckey; + void inbound_session(llarp::Addr & src) { @@ -37,6 +41,30 @@ struct server bool ensure_privkey() { + std::error_code ec; + if(!fs::exists(keyfile, ec)) + { + if(!keygen(keyfile)) + return false; + } + std::ifstream f(keyfile); + if(f.is_open()) + { + f.read((char*)seckey, sizeof(seckey)); + return true; + } + return false; + } + + bool keygen(const char * fname) + { + crypto->keygen(&seckey); + std::ofstream f(fname); + if(f.is_open()) + { + f.write((char*)seckey, sizeof(seckey)); + return true; + } return false; } @@ -84,13 +112,14 @@ struct server }; -server * link_alloc(struct llarp_alloc * mem, struct llarp_msg_muxer * muxer, const char * keyfile) + server * link_alloc(struct llarp_alloc * mem, struct llarp_msg_muxer * muxer, const char * keyfile, struct llarp_crypto * crypto) { void * ptr = mem->alloc(mem, sizeof(struct server), 8); if(ptr) { server * link = new (ptr) server; link->mem = mem; + link->crypto = crypto; link->muxer = muxer; strncpy(link->keyfile, keyfile, sizeof(link->keyfile)); return link; @@ -110,8 +139,11 @@ bool link_configure(struct llarp_link * l, struct llarp_ev_loop * netloop, const server * link = static_cast(l->impl); if(!link->ensure_privkey()) + { + printf("failed to ensure private key\n"); return false; - + } + // bind link->udp.addr.sa_family = af; @@ -197,7 +229,7 @@ extern "C" { void iwp_link_init(struct llarp_link * link, struct llarp_iwp_args args, struct llarp_msg_muxer * muxer) { - link->impl = iwp::link_alloc(args.mem, muxer, args.keyfile); + link->impl = iwp::link_alloc(args.mem, muxer, args.keyfile, args.crypto); link->name = iwp::link_name; link->configure = iwp::link_configure; link->start_link = iwp::link_start;