diff --git a/include/llarp/dns.hpp b/include/llarp/dns.hpp index 4b20c70dd..47695c17a 100644 --- a/include/llarp/dns.hpp +++ b/include/llarp/dns.hpp @@ -23,9 +23,9 @@ struct dnsd_context; struct dns_tracker { // uint c_responses; - uint c_requests; + uint32_t c_requests; // request has to be a pointer - std::unordered_map< uint, std::unique_ptr< dnsc_answer_request > > + std::unordered_map< uint32_t, std::unique_ptr< dnsc_answer_request > > client_request; // FIXME: support multiple dns server contexts dnsd_context *dnsd; diff --git a/include/tuntap.h b/include/tuntap.h index 28da2e51b..80c6bb61c 100644 --- a/include/tuntap.h +++ b/include/tuntap.h @@ -145,7 +145,7 @@ extern "C" int mode; #endif #if defined(Windows) - OVERLAPPED ovl; + OVERLAPPED ovl[2]; #endif }; diff --git a/llarp/dnsc.cpp b/llarp/dnsc.cpp index 3065feb22..f2370bc99 100644 --- a/llarp/dnsc.cpp +++ b/llarp/dnsc.cpp @@ -228,7 +228,7 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request, // FIXME: only handling one atm dns_msg_question *question = nullptr; - for(uint i = 0; i < hdr->qdCount; i++) + for(uint32_t i = 0; i < hdr->qdCount; i++) { question = decode_question((const char *)castBuf); llarp::LogDebug("Read a question"); @@ -241,7 +241,7 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request, // FIXME: only handling one atm std::vector< dns_msg_answer * > answers; dns_msg_answer *answer = nullptr; - for(uint i = 0; i < hdr->anCount; i++) + for(uint32_t i = 0; i < hdr->anCount; i++) { answer = decode_answer((const char *)castBuf); answers.push_back(answer); @@ -275,7 +275,7 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request, // handle authority records (usually no answers with these, so we'll just // stomp) usually NS records tho - for(uint i = 0; i < hdr->nsCount; i++) + for(uint32_t i = 0; i < hdr->nsCount; i++) { answer = decode_answer((const char *)castBuf); // answers.push_back(answer); @@ -602,7 +602,7 @@ llarp_host_resolved(dnsc_answer_request *const request) dns_tracker *tracker = (dns_tracker *)request->context->tracker; auto val = std::find_if( tracker->client_request.begin(), tracker->client_request.end(), - [request](std::pair< const uint, std::unique_ptr< dnsc_answer_request > > + [request](std::pair< const uint32_t, std::unique_ptr< dnsc_answer_request > > &element) { return element.second.get() == request; }); if(val != tracker->client_request.end()) { diff --git a/llarp/dnsd.cpp b/llarp/dnsd.cpp index 9020c42b1..5b093262d 100644 --- a/llarp/dnsd.cpp +++ b/llarp/dnsd.cpp @@ -71,7 +71,7 @@ write404_dnss_response(const struct sockaddr *from, put16bits(write_buffer, 1); // rdLength *write_buffer++ = 0; // write a null byte - uint out_bytes = write_buffer - bufferBegin; + uint32_t out_bytes = write_buffer - bufferBegin; llarp::LogDebug("Sending 404, ", out_bytes, " bytes"); // struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user; request->sendto_hook(request->user, from, buf, out_bytes); @@ -140,7 +140,7 @@ writecname_dnss_response(std::string cname, const struct sockaddr *from, *write_buffer++ = 0; *write_buffer++ = 1; - uint out_bytes = write_buffer - bufferBegin; + uint32_t out_bytes = write_buffer - bufferBegin; llarp::LogDebug("Sending cname, ", out_bytes, " bytes"); // struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user; request->sendto_hook(request->user, from, buf, out_bytes); @@ -180,7 +180,7 @@ writesend_dnss_revresponse(std::string reverse, const struct sockaddr *from, put16bits(write_buffer, reverse.length() + 2); // rdLength code_domain(write_buffer, reverse); - uint out_bytes = write_buffer - bufferBegin; + uint32_t out_bytes = write_buffer - bufferBegin; llarp::LogDebug("Sending reverse: ", reverse, " ", out_bytes, " bytes"); // struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user; request->sendto_hook(request->user, from, buf, out_bytes); @@ -243,7 +243,7 @@ writesend_dnss_response(struct sockaddr *hostRes, const struct sockaddr *from, *write_buffer++ = ip[2]; *write_buffer++ = ip[3]; - uint out_bytes = write_buffer - bufferBegin; + uint32_t out_bytes = write_buffer - bufferBegin; llarp::LogDebug("Sending found, ", out_bytes, " bytes"); // struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user; request->sendto_hook(request->user, from, buf, out_bytes); diff --git a/llarp/ev_win32.hpp b/llarp/ev_win32.hpp index 4191c8e70..4b8a9dd2d 100644 --- a/llarp/ev_win32.hpp +++ b/llarp/ev_win32.hpp @@ -17,25 +17,17 @@ namespace llarp // we receive queued data in the OVERLAPPED data field, // much like the pipefds in the UNIX kqueue and loonix // epoll handles - WSAOVERLAPPED portfd; - size_t iosz; + WSAOVERLAPPED portfd[2]; udp_listener(SOCKET fd, llarp_udp_io* u) : ev_io(fd), udp(u) { - memset((void*)&portfd, 0, sizeof(WSAOVERLAPPED)); + memset((void*)&portfd[0], 0, sizeof(WSAOVERLAPPED)*2); }; ~udp_listener() { } - int - getData(void* buf, size_t sz, size_t ret) - { - iosz = ret; - return read(buf, sz); - } - virtual int read(void* buf, size_t sz) { @@ -47,7 +39,7 @@ namespace llarp // WSARecvFrom llarp::LogDebug("read ", sz, " bytes into socket"); int ret = ::WSARecvFrom(std::get< SOCKET >(fd), &wbuf, 1, nullptr, &flags, - addr, &slen, &portfd, nullptr); + addr, &slen, &portfd[0], nullptr); // 997 is the error code for queued ops int s_errno = ::WSAGetLastError(); if(ret && s_errno != 997) @@ -55,8 +47,10 @@ namespace llarp llarp::LogWarn("recv socket error ", s_errno); return -1; } - // get the _real_ payload size from tick() - udp->recvfrom(udp, addr, buf, iosz); + /*if (sz > EV_READ_BUF_SZ) + return -1;*/ + + udp->recvfrom(udp, addr, buf, sz); return 0; } @@ -79,7 +73,7 @@ namespace llarp // WSASendTo llarp::LogDebug("write ", sz, " bytes into socket"); ssize_t sent = ::WSASendTo(std::get< SOCKET >(fd), &wbuf, 1, nullptr, 0, - to, slen, &portfd, nullptr); + to, slen, &portfd[1], nullptr); int s_errno = ::WSAGetLastError(); if(sent && s_errno != 997) { @@ -94,7 +88,7 @@ namespace llarp { llarp_tun_io* t; device* tunif; - OVERLAPPED* tun_async; + OVERLAPPED* tun_async[2]; tun(llarp_tun_io* tio) : ev_io(INVALID_HANDLE_VALUE) , t(tio) @@ -123,7 +117,7 @@ namespace llarp bool do_write(void* data, size_t sz) { - return WriteFile(std::get< HANDLE >(fd), data, sz, nullptr, tun_async); + return WriteFile(std::get< HANDLE >(fd), data, sz, nullptr, tun_async[1]); } int @@ -159,7 +153,8 @@ namespace llarp } fd = tunif->tun_fd; - tun_async = &tunif->ovl; + tun_async[0] = &tunif->ovl[0]; + tun_async[1] = &tunif->ovl[1]; if(std::get< HANDLE >(fd) == INVALID_HANDLE_VALUE) return false; @@ -222,7 +217,7 @@ struct llarp_win32_loop : public llarp_ev_loop { llarp::LogDebug("size: ", iolen, "\tev_id: ", ev_id, "\tqdata: ", qdata); - ev->getData(readbuf, sizeof(readbuf), iolen); + ev->read(readbuf, iolen); } ++idx; } @@ -262,7 +257,7 @@ struct llarp_win32_loop : public llarp_ev_loop if(ev && !ev->fd.valueless_by_exception()) { llarp::LogInfo("size: ", iolen, "\tev_id: ", ev_id, "\tqdata: ", qdata); - ev->getData(readbuf, sizeof(readbuf), iolen); + ev->read(readbuf, sizeof(readbuf)); } ++idx; } @@ -381,7 +376,7 @@ struct llarp_win32_loop : public llarp_ev_loop return false; } ::ReadFile((HANDLE)std::get< 0 >(ev->fd), &buf, 1024, nullptr, - &udp->portfd); + &udp->portfd[0]); break; case 1: t = dynamic_cast< llarp::tun* >(ev); @@ -391,7 +386,7 @@ struct llarp_win32_loop : public llarp_ev_loop delete ev; return false; } - ::ReadFile(std::get< 1 >(ev->fd), &buf, 1024, nullptr, t->tun_async); + ::ReadFile(std::get< 1 >(ev->fd), &buf, 1024, nullptr, t->tun_async[0]); break; default: return false; diff --git a/llarp/router.cpp b/llarp/router.cpp index 714807a93..9da1a57fd 100644 --- a/llarp/router.cpp +++ b/llarp/router.cpp @@ -685,7 +685,7 @@ llarp_router::Run() { llarp::LogInfo("Found adapter for public address"); } - if(!a.isPrivate()) + if(!llarp::IsBogon(*a.addr6())) { llarp::LogInfo("Loading Addr: ", a, " into our RC"); _rc.addrs.push_back(addr); diff --git a/llarp/threadpool.cpp b/llarp/threadpool.cpp index 4c0663706..4eba6fa76 100644 --- a/llarp/threadpool.cpp +++ b/llarp/threadpool.cpp @@ -18,12 +18,6 @@ #include #endif -#ifdef _MSC_VER -#include -extern "C" void -SetThreadName(DWORD dwThreadID, LPCSTR szThreadName); -#endif - namespace llarp { namespace thread @@ -43,8 +37,6 @@ namespace llarp pthread_set_name_np(pthread_self(), name); #elif(__linux__) || (__MINGW32__) pthread_setname_np(pthread_self(), name); -#elif defined(_MSC_VER) - SetThreadName(GetCurrentThreadId(), name); #endif } for(;;) diff --git a/vendor/libtuntap-master/tuntap-windows.c b/vendor/libtuntap-master/tuntap-windows.c index 83b7e880a..d34da9004 100644 --- a/vendor/libtuntap-master/tuntap-windows.c +++ b/vendor/libtuntap-master/tuntap-windows.c @@ -394,7 +394,7 @@ tuntap_read(struct device *dev, void *buf, size_t size) { DWORD len; - if(ReadFile(dev->tun_fd, buf, (DWORD)size, &len, &dev->ovl) == 0) + if(ReadFile(dev->tun_fd, buf, (DWORD)size, &len, &dev->ovl[0]) == 0) { int errcode = GetLastError(); @@ -415,7 +415,7 @@ tuntap_write(struct device *dev, void *buf, size_t size) { DWORD len; - if(WriteFile(dev->tun_fd, buf, (DWORD)size, &len, &dev->ovl) == 0) + if(WriteFile(dev->tun_fd, buf, (DWORD)size, &len, &dev->ovl[1]) == 0) { int errcode = GetLastError(); diff --git a/vendor/libtuntap-master/tuntap.cpp b/vendor/libtuntap-master/tuntap.cpp index 630107b23..6ea9c8f3e 100644 --- a/vendor/libtuntap-master/tuntap.cpp +++ b/vendor/libtuntap-master/tuntap.cpp @@ -69,7 +69,7 @@ extern "C" dev->ctrl_sock = -1; dev->flags = 0; #if defined(Windows) - memset(&dev->ovl, 0, sizeof(OVERLAPPED)); + memset(&dev->ovl[0], 0, sizeof(OVERLAPPED)*2); #endif __tuntap_log = &tuntap_log_default;