|
|
@ -82,7 +82,7 @@ win32_tun_io::add_ev(llarp_ev_loop* loop)
|
|
|
|
|
|
|
|
|
|
|
|
// we're already non-blocking
|
|
|
|
// we're already non-blocking
|
|
|
|
// add to list
|
|
|
|
// add to list
|
|
|
|
tun_listeners.push_back(this);
|
|
|
|
tun_listeners.push_back(this);
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
read(readbuf, 1500);
|
|
|
|
read(readbuf, 1500);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
@ -91,16 +91,16 @@ win32_tun_io::add_ev(llarp_ev_loop* loop)
|
|
|
|
// places data in event queue for kernel to process
|
|
|
|
// places data in event queue for kernel to process
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
win32_tun_io::do_write(void* data, size_t sz)
|
|
|
|
win32_tun_io::do_write(void* data, size_t sz)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DWORD code;
|
|
|
|
DWORD code;
|
|
|
|
asio_evt_pkt* pkt = new asio_evt_pkt;
|
|
|
|
asio_evt_pkt* pkt = new asio_evt_pkt;
|
|
|
|
pkt->buf = data;
|
|
|
|
pkt->buf = data;
|
|
|
|
pkt->sz = sz;
|
|
|
|
pkt->sz = sz;
|
|
|
|
pkt->write = true;
|
|
|
|
pkt->write = true;
|
|
|
|
memset(&pkt->pkt, '\0', sizeof(pkt->pkt));
|
|
|
|
memset(&pkt->pkt, '\0', sizeof(pkt->pkt));
|
|
|
|
WriteFile(tunif->tun_fd, data, sz, nullptr, &pkt->pkt);
|
|
|
|
WriteFile(tunif->tun_fd, data, sz, nullptr, &pkt->pkt);
|
|
|
|
code = GetLastError();
|
|
|
|
code = GetLastError();
|
|
|
|
//llarp::LogInfo("wrote data, error ", code);
|
|
|
|
// llarp::LogInfo("wrote data, error ", code);
|
|
|
|
return (code == 0 || code == 997);
|
|
|
|
return (code == 0 || code == 997);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -115,7 +115,7 @@ win32_tun_io::flush_write()
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
win32_tun_io::read(byte_t* buf, size_t sz)
|
|
|
|
win32_tun_io::read(byte_t* buf, size_t sz)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DWORD code;
|
|
|
|
DWORD code;
|
|
|
|
asio_evt_pkt* pkt = new asio_evt_pkt;
|
|
|
|
asio_evt_pkt* pkt = new asio_evt_pkt;
|
|
|
|
pkt->buf = buf;
|
|
|
|
pkt->buf = buf;
|
|
|
@ -148,7 +148,7 @@ tun_ev_loop(void* u)
|
|
|
|
// of the tun logic
|
|
|
|
// of the tun logic
|
|
|
|
for (const auto& tun : tun_listeners)
|
|
|
|
for (const auto& tun : tun_listeners)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
logic->call_soon([tun]() {
|
|
|
|
logic->call_soon([tun]() {
|
|
|
|
tun->flush_write();
|
|
|
|
tun->flush_write();
|
|
|
|
if (tun->t->tick)
|
|
|
|
if (tun->t->tick)
|
|
|
|
tun->t->tick(tun->t);
|
|
|
|
tun->t->tick(tun->t);
|
|
|
@ -166,22 +166,22 @@ tun_ev_loop(void* u)
|
|
|
|
// llarp::LogInfo("read tun ", size, " bytes, pass to handler");
|
|
|
|
// llarp::LogInfo("read tun ", size, " bytes, pass to handler");
|
|
|
|
logic->call_soon([pkt, size, ev]() {
|
|
|
|
logic->call_soon([pkt, size, ev]() {
|
|
|
|
if (ev->t->recvpkt)
|
|
|
|
if (ev->t->recvpkt)
|
|
|
|
ev->t->recvpkt(ev->t, llarp_buffer_t(pkt->buf, size));
|
|
|
|
ev->t->recvpkt(ev->t, llarp_buffer_t(pkt->buf, size));
|
|
|
|
free(pkt->buf);
|
|
|
|
free(pkt->buf);
|
|
|
|
delete pkt;
|
|
|
|
delete pkt;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
ev->read(readbuf, 1500);
|
|
|
|
ev->read(readbuf, 1500);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// ok let's queue another read!
|
|
|
|
// ok let's queue another read!
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
byte_t* readbuf = (byte_t*)malloc(1500);
|
|
|
|
ev->read(readbuf, 1500);
|
|
|
|
ev->read(readbuf, 1500);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
logic->call_soon([ev]() {
|
|
|
|
logic->call_soon([ev]() {
|
|
|
|
ev->flush_write();
|
|
|
|
ev->flush_write();
|
|
|
|
if(ev->t->tick)
|
|
|
|
if (ev->t->tick)
|
|
|
|
ev->t->tick(ev->t);
|
|
|
|
ev->t->tick(ev->t);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|