pull/1/head
Jeff Becker 6 years ago
parent 8b8deb49ba
commit 9deafe7ce8
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -4,6 +4,6 @@ threads=1
[netdb]
dir=./tmp-nodes
[dtls-links]
[iwp-links]
lo=1090
#lo=eth

@ -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;

@ -1,8 +1,9 @@
#include <llarp/iwp.h>
#include <llarp/net.h>
#include <fstream>
#include <map>
#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<llarp::Addr, llarp_link_session> 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<server*>(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;

Loading…
Cancel
Save