Commit Graph

6683 Commits

Author SHA1 Message Date
Jason Rhinelander
f47e0cf7a2 Fix UB -- use after move 2021-03-09 21:23:40 -04:00
Jeff Becker
a8885c5405
update gui hashpin for windows 2021-03-09 16:07:41 -05:00
Jason Rhinelander
e0bb7b7d0f Bump oxen-mq submodule to tagged 1.2.4 2021-03-09 15:45:50 -04:00
Jeff
1de2bb7ecf
Merge pull request #1572 from majestrate/tag-v0.8.4-2021-03-09
bump version for 0.8.4
2021-03-09 08:06:29 -05:00
Jeff Becker
084e0aa023
bump version for 0.8.4 2021-03-09 07:51:37 -05:00
Jason Rhinelander
39e2647b1c
Merge pull request #1570 from majestrate/unbreak-android-2021-03-07
Unbreak android
2021-03-08 11:55:44 -04:00
Jeff Becker
324498fe9a
flip order of parameters so it works 2021-03-08 06:59:55 -05:00
Jeff Becker
3d09b94590
make android work again
ip packet on read error was returning an uninitialized ip packet with non zero size so it was thinking it was a valid packet.
value initialize it to set the packet size to zero by default.

this fixed it in an emulator at least...
2021-03-08 06:17:20 -05:00
Jeff Becker
6550aa844c
try to unbreak more 2021-03-08 06:17:20 -05:00
Jeff Becker
7af4807302 correctly set size of OwnedBuffer when using OwnedBuffer::copy_used 2021-03-07 12:16:15 -04:00
Jeff
6daf5c6ea6
Merge pull request #1568 from jagerman/clang-format-11
Clang format 11
2021-03-05 13:21:36 -05:00
Jason Rhinelander
91d6698a9d Reformat with clang-format-11 2021-03-05 13:36:31 -04:00
Jason Rhinelander
e5aa96ed7c Upgrade to clang-format 11
The formatting changes here are not too large and also nice: in
particular clang-format-11 appears to do better handling of `{...}`
constructor braces/arguments.
2021-03-05 13:36:31 -04:00
Jeff
76ee6734db
Merge pull request #1557 from jagerman/uvw-overhaul
libuv -> uvw overhaul
2021-03-04 17:12:10 -05:00
Jeff
57a5f8cb15
Merge pull request #1567 from jagerman/loki-core-docker-deps
Add oxen-core deps to docker images
2021-03-04 17:04:26 -05:00
Jeff Becker
27685b1b6e
fix docker lines and dont install recommended packages 2021-03-04 17:03:02 -05:00
Jason Rhinelander
78a43e7163 Add oxen-core deps to docker images 2021-03-04 17:21:45 -04:00
Jason Rhinelander
c00de1e4ec Add wakeup call into transit_hop UpstreamHandler 2021-03-04 16:51:18 -04:00
Jason Rhinelander
89b582bf60 Modernize [[maybe_unused]] attribute 2021-03-04 16:51:18 -04:00
Jason Rhinelander
4b5387a078 Remove unused ShouldFlushNow method 2021-03-04 16:51:18 -04:00
Jason Rhinelander
f9dc308f75 Tick event loop on data queuing 2021-03-04 16:51:18 -04:00
Jason Rhinelander
895acc45ff EventLoop: add public wakeup() method, and call it from call()
call(), when invoked from the logic thread, wasn't triggering a wakeup
which stalled some traffic (such as client-to-snode packets).

Fix it by triggering a wakeup on `call()`, and expose it because this is
a useful thing to be able to do.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
f8d5e106a0 Uncurse SockAddr's sockaddr* operator
The `const sockaddr*` conversion was returning a pointer to the
sockaddr_in6, but with its family set to AF_INET, so the receiving code
would have treated interpreting the result as a sockaddr_in pointer --
but it isn't, and trying to get the IPv4 from the mis-reinterpreted
sockaddr_in6 fails; this then prevented uvw UDP binding (which uses the
sockaddr* operator) from working.

This changes it to always leave the family value at the proper value and
using the ipv6_is_mapped_ipv4 check to determine when we have (and
should return) a pointer to the sockaddr_in rather than the
sockaddr_in6.

Also fixes toString() to compare the full prefix instead of just bytes
10 and 11.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
62fc1bbc48 Make llarp_buffer_t constructible from an rvalue reference 2021-03-04 16:51:18 -04:00
Jason Rhinelander
f8486604c4 Export UDP file descriptor (for android) 2021-03-04 16:51:18 -04:00
Jason Rhinelander
d995766436 Android & hive fixes 2021-03-04 16:51:18 -04:00
Jason Rhinelander
673d065ed8 Remove HasNextPacket() (and fix win32)
We don't use it anymore (instead we just ReadNextPacket until it returns
an empty result).
2021-03-04 16:51:18 -04:00
Jason Rhinelander
6e05dc693f Remove unused arguments (and ants) 2021-03-04 16:51:18 -04:00
Jason Rhinelander
2c827870c9 Simplify code of many f's
We don't need to go through the contention killer here, that was mainly
for (long ago) debugging reasons.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
36edabd9b0 Rename EventLoop::udp to EventLoop::make_udp
Makes it consistent with the make_waker, etc.

Also removes some debugging.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
afd856bca0 Remove unused junk (also fix win32 compilation fail) 2021-03-04 16:51:18 -04:00
Jason Rhinelander
ced035d401 Switch uvw to a fork with libuv backwards compat support 2021-03-04 16:51:18 -04:00
Jason Rhinelander
096f37fe4e Fix linux compilation & narrowing conversion warning 2021-03-04 16:51:18 -04:00
Jason Rhinelander
e198bfd3e1 Remove unused variable 2021-03-04 16:51:18 -04:00
Jason Rhinelander
c4559d158e Make format 2021-03-04 16:51:18 -04:00
Jason Rhinelander
ccc7b5c9e9 Merge Logic functions into EventLoop
loop->call(...) is similar to the old logic->Call(...), but is smart
about the current thread: if called from within the event loop it simply
runs the argument directly, otherwise it queues it.

Similarly most of the other event loop calls are also now thread-aware:
for example, `call_later(...)` can queue the job directly when called if
in the event loop rather than having to double-queue through the even
loop (once to call, then inside the call to initiate the time).
2021-03-04 16:51:18 -04:00
Jason Rhinelander
5b555ee5aa Replace libuv with uvw & related refactoring
- removes all the llarp_ev_* functions, replacing with methods/classes/functions in the llarp
  namespace.
- banish ev/ev.h to the void
- Passes various things by const lvalue ref, especially shared_ptr's that don't need to be copied
  (to avoid an atomic refcount increment/decrement).
- Add a llarp::UDPHandle abstract class for UDP handling
- Removes the UDP tick handler; code that needs tick can just do a separate handler on the event
  loop outside the UDP socket.
- Adds an "OwnedBuffer" which owns its own memory but is implicitly convertible to a llarp_buffer_t.
  This is mostly needed to take over ownership of buffers from uvw without copying them as,
  currently, uvw does its own allocation (pending some open upstream issues/PRs).
- Logic:
  - add `make_caller`/`call_forever`/`call_every` utility functions to abstract Call wrapping and
    dependent timed tasks.
  - Add inLogicThread() so that code can tell its inside the logic thread (typically for
    debugging assertions).
  - get rid of janky integer returns and dealing with cancellations on call_later: the other methods
    added here and the event loop code remove the need for them.
- Event loop:
  - redo everything with uvw instead of libuv
  - rename EventLoopWakeup::Wakeup to EventLoopWakeup::Trigger to better reflect what it does.
  - add EventLoopRepeater for repeated events, and replace the code that reschedules itself every
    time it is called with a repeater.
  - Split up `EventLoop::run()` into a non-virtual base method and abstract `run_loop()` methods;
    the base method does a couple extra setup/teardown things that don't need to be in the derived class.
  - udp_listen is replaced with ev->udp(...) which returns a new UDPHandle object rather that
    needing gross C-style-but-not-actually-C-compatible structs.
  - Remove unused register_poll_fd_(un)readable
  - Use shared_ptr for EventLoopWakeup rather than returning a raw pointer; uvw lets us not have to
    worry about having the event loop class maintain ownership of it.
  - Add factory EventLoop::create() function to create a default (uvw-based) event loop (previously
    this was one of the llarp_ev_blahblah unnamespaced functions).
  - ev_libuv: this is mostly rewritten; all of the glue code/structs, in particular, are gone as
    they are no longer needed with uvw.
- DNS:
  - Rename DnsHandler to DnsInterceptor to better describe what it does (this is the code that
    intercepts all DNS to the tun IP range for Android).
- endpoint:
  - remove unused "isolated network" code
  - remove distinct (but actually always the same) variables for router/endpoint logic objects
- llarp_buffer_t
  - make constructors type-safe against being called with points to non-size-1 values
- tun packet reading:
  - read all available packets off the device/file descriptor; previously we were reading one packet
    at a time then returning to the event loop to poll again.
  - ReadNextPacket() now returns a 0-size packet if the read would block (so that we can implement
    the previous point).
  - ReadNextPacket() now throws on I/O error
- Miscellaneous code cleanups/simplifications
2021-03-04 16:51:18 -04:00
Jason Rhinelander
c71d3527bd C++17 simplification 2021-03-04 16:51:18 -04:00
Jason Rhinelander
8aa1b702cd Disallow evil compilation
-fpermissive allows nasty things that are (apparently) needed on
Windows, so only enable it there.

vla are evil, so don't just warn but error on it.

remove duplicate -Wno-unknown-pragmas
2021-03-04 16:51:18 -04:00
Jason Rhinelander
ffe9bbc984 Tweak clang-tidy rules
Turn off modernize-use-trailing-return because it's *really* annoying
(and clangd picks it up when using it for editing).

Turn off modernize-use-nodiscard as well because it's already annoying.

Add bugprone-* as well because it includes a lot of useful checks.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
dfb62d06ce Shut up noisy catch tests 2021-03-04 16:51:18 -04:00
Jason Rhinelander
8b00eacabf Fix signed/unsigned char comparison bug
These functions would not working properly if given a high bit char
value.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
00df8b85da Bump required oxenmq version
Current lokinet dev relies on something from oxenmq dev branch which is
in the not-yet-released next version; without this lokinet tries using
the system 1.2.3 install, which then fails the build.
2021-03-04 16:51:18 -04:00
Jason Rhinelander
e3aff6c36c Add more junk & clangd symlinks to .gitignore
Ignore any root directory starting with build so that you can have many
build directories (build, build2, build-win32, ...) that get ignored.

Add .cache which clangd creates

Ignore compile_commands.json (and generate it by default) which helps
clangd, but needs to be symlinked to a compile_commands.json in a build
dir so isn't suitable for inclusion in the repo.
2021-03-04 16:51:18 -04:00
Jeff
db515e48ec
Merge pull request #1561 from majestrate/catch2_migrate-2021-03-03
totally remove gtest/gmock from unit tests.
2021-03-04 15:50:36 -05:00
Jeff
abf057d6e3
Merge pull request #1536 from majestrate/memleak-fix-2021-02-15
plug super slow memory leak
2021-03-04 15:50:11 -05:00
Jeff
72c9b0f1b4
Merge pull request #1535 from majestrate/no-iwp-multiack-2021-02-13
only do single ack packets
2021-03-04 15:49:12 -05:00
Jeff Becker
4cf0f1ee35
decaying hashset unit test fixes 2021-03-04 15:47:09 -05:00
Jeff Becker
5fd15fa044
generate keys in unit test 2021-03-04 15:46:12 -05:00
Jeff Becker
6c8e5256d6
catchAll -> testAll 2021-03-04 15:45:52 -05:00