Commit Graph

794 Commits (9bf002cc8d72f42f92ea6c30bffa88b07d5cbb22)

Author SHA1 Message Date
Jeff Becker d4ccf895e3
Merge branch 'fix-up-introset-lookup-fails-2020-03-02' of ssh://github.com/majestrate/loki-network into fix-up-introset-lookup-fails-2020-03-02 4 years ago
Jeff Becker 79746e3719
remote lookup limiting of 500ms per address 4 years ago
Stephen Shelton 9be8050854
Make format 4 years ago
Stephen Shelton 886a981997
Consolidate introset publishing constants 4 years ago
Jeff Becker a09bb89d15
dont put multiple outbound contexts 4 years ago
Jeff Becker 158a9018f3
rename variable 4 years ago
Jeff Becker 9ff31f6402
spelling is hard 4 years ago
Jeff Becker 8f4362f092
fix up introset lookups 4 years ago
Jason Rhinelander 806d43c34e
Merge pull request #1147 from notlesh/diagnose-pubintro-round2-2020-02-28
Diagnose pubintro round2
4 years ago
Jason Rhinelander b60adc909d Make IntroSet publish confirmed less verbose
Essentially just rate limit the confirmation message to one message per
second.
4 years ago
Jason Rhinelander cfee824a79 Don't republish when we have extra paths
This caused some unwanted behaviour:

- on initial startup we often get two publishes in quick succession
because we're publishing and building paths at the same time

- at the 10m mark we enter a publish loop every 5 seconds because we
have paths with lifetimes < 10min that was triggering this condition,
and yet those paths will never actually be included in the introset
because they are expiring in <10m.
4 years ago
Jason Rhinelander 823c17206f Add min intro set paths, slightly increase spread speed
This should ensure that we have enough shortly after startup for initial
path builds.

The spread speed here gets slightly increased to lifetime/5 (=4min)
instead of lifetime/4 (=5min) so that our "normal" number of paths is 5
with occassional momentary drops to 4, but should always keep us >= the
new minimum of 4.

Because the path spread happens over time, this shouldn't result in a
rebuild of several paths: we'll build 4 quickly, then another at +4m,
another at +8m, etc.  When the initial 4 expire, we'll be dropping from
9 to 5 established but that's still above the minimum (4) so we won't
need to reconnect to several at once, and the spread builds should keep
us at 5 all the time.
4 years ago
Jason Rhinelander 27b8743107 Add warns for introset publish failures 4 years ago
Stephen Shelton 62014de91c
Handle PubIntro relayOrder logic on client-side 4 years ago
Stephen Shelton 61d19179f7
Remove dead code 4 years ago
Jeff Becker ce335dc47d
remove convotags on dead outbound context 4 years ago
Jeff 19a751c41b
Merge pull request #1127 from notlesh/spread-snapp-path-builds-evenly-2020-02-24
Spread snapp path builds evenly
4 years ago
Jeff 4f29405e9e
Merge pull request #1115 from majestrate/handle-multiple-responses-per-lookup-2020-02-20
handle multiple responses per hidden service lookup
4 years ago
Stephen Shelton abe4015986
Use constants for path build timing 4 years ago
Stephen Shelton 230037b9f3
Increase default path timeout from 10min to 20min 4 years ago
Stephen Shelton f0374eb2b7
Use existing 'lastBuild' var for spacing path builds 4 years ago
Stephen Shelton c2c010dbad
Make format 4 years ago
Stephen Shelton c1b5e453c7
Big I, little i, what begins with I? 4 years ago
Stephen Shelton 1db6c6ae3b
Make format 4 years ago
Stephen Shelton c2f719c996
Build endpoint paths at even[ish] intervals 4 years ago
Jeff Becker bf0416cab8
remove Time_t, add operator overload for printing llarp_time_t and add to_json function for serializing llarp_time_t to json 4 years ago
Jeff Becker 524726e4cc
cast interval to std::chrono::milliseconds before dividing by 4 4 years ago
Jeff Becker d2d109e92c
llarp_time_t is now using std::chrono 4 years ago
Jeff Becker f4520ac920
make decaying hashset use llarp::Time_t and move unit tests to use catch2 4 years ago
Jeff Becker 39cdc9e6dd
shift intro on introset update 4 years ago
Jason Rhinelander 54186c4a89 Replace absl string_view with string_view from lokimq
When we add loki-mq has a dependency we can just alias it, but for now
it's easier to copy the header than add the whole submodule library.
4 years ago
Jason Rhinelander 089056ca5b Remove all ABSL_ATTRIBUTE_UNUSED uses 4 years ago
Jason Rhinelander f84ce61d66 Removed empty cpp files
These aren't needed: CMake already knows how to follow #includes and
rebuild when headers change as long as the headers are included
*somewhere*.  The extra .cpp files here just require building a bunch of
.cpp files with just header content that we just end up throw away
during linking (since the same things will also be compiled in whatever
other compilation units include the same headers).
4 years ago
Jason Rhinelander b4440094b0 De-abseil, part 2: mutex, locks, (most) time
- util::Mutex is now a std::shared_timed_mutex, which is capable of
  exclusive and shared locks.

- util::Lock is still present as a std::lock_guard<util::Mutex>.

- the locking annotations are preserved, but updated to the latest
  supported by clang rather than using abseil's older/deprecated ones.

- ACQUIRE_LOCK macro is gone since we don't pass mutexes by pointer into
  locks anymore (WTF abseil).

- ReleasableLock is gone.  Instead there are now some llarp::util helper
  methods to obtain unique and/or shared locks:
    - `auto lock = util::unique_lock(mutex);` gets an RAII-but-also
      unlockable object (std::unique_lock<T>, with T inferred from
      `mutex`).
    - `auto lock = util::shared_lock(mutex);` gets an RAII shared (i.e.
      "reader") lock of the mutex.
    - `auto lock = util::unique_locks(mutex1, mutex2, mutex3);` can be
      used to atomically lock multiple mutexes at once (returning a
      tuple of the locks).
  This are templated on the mutex which makes them a bit more flexible
  than using a concrete type: they can be used for any type of lockable
  mutex, not only util::Mutex.  (Some of the code here uses them for
  getting locks around a std::mutex).  Until C++17, using the RAII types
  is painfully verbose:

  ```C++
  // pre-C++17 - needing to figure out the mutex type here is annoying:
  std::unique_lock<util::Mutex> lock(mutex);
  // pre-C++17 and even more verbose (but at least the type isn't needed):
  std::unique_lock<decltype(mutex)> lock(mutex);
  // our compromise:
  auto lock = util::unique_lock(mutex);
  // C++17:
  std::unique_lock lock(mutex);
  ```

  All of these functions will also warn (under gcc or clang) if you
  discard the return value.  You can also do fancy things like
  `auto l = util::unique_lock(mutex, std::adopt_lock)` (which lets a
  lock take over an already-locked mutex).

- metrics code is gone, which also removes a big pile of code that was
  only used by metrics:
  - llarp::util::Scheduler
  - llarp:🧵:TimerQueue
  - llarp::util::Stopwatch
4 years ago
Jeff 7c5a721457
Merge pull request #1114 from notlesh/redundant-introset-lookup-improvements-2020-02-20
Redundant introset lookup improvements
4 years ago
Jeff Becker 748be8eec8
handle multiple responses per hidden service lookup 4 years ago
Stephen Shelton 0429bafbb3
Merge pull request #1111 from notlesh/redundant-introset-propagation-2020-02-19
Redundant introset propagation
4 years ago
Stephen Shelton 66cb30fa58
Refactor: remove recursionDepth from DHT lookups 4 years ago
Jeff 6ac5f19b3a
Merge pull request #1110 from jagerman/no-abseil-optional
De-abseil, part 1: remove absl::optional
4 years ago
Stephen Shelton 4c499fb076
Make format 4 years ago
Stephen Shelton dff9aeb250
Propagate Introset publishing redundantly 4 years ago
Jeff Becker dc7828941f
add log statement 4 years ago
Jason Rhinelander ac1486d0be Replace absl::optional with optional-lite
Step 1 of removing abseil from lokinet.

For the most part this is a drop-in replacement, but there are also a
few changes here to the JSONRPC layer that were needed to work around
current gcc 10 dev snapshot:

- JSONRPC returns a json now instead of an optional<json>.  It doesn't
  make any sense to have a json rpc call that just closes the connection
  with returning anything.  Invoked functions can return a null (default
  constructed) result now if they don't have anything to return (such a
  null value won't be added as "result").
4 years ago
Jeff 20bc168d1c
Merge pull request #1093 from majestrate/toggle-publishing-introsets-2020-02-11
make publishing introsets optional
4 years ago
Jeff Becker 1874f439b7
add comment 4 years ago
Jeff Becker e907d2ae19
handover fixes 4 years ago
Jeff Becker f7f5d893a5
use endpoint path for lookup because outboundcontext does not implement pathset::HandleGotIntroMessage 4 years ago
Jeff Becker c9866b6a0b
simplify 4 years ago
Jeff Becker 9aeee37347
short circuit 4 years ago
Jeff Becker 6a495dd090
ammend outbound context logic 4 years ago
Jeff Becker 02228ded08
spread out path builds 4 years ago
Jason Rhinelander 9e096d1996 Reduce introset publishing interal to 2.5min instead of 1.25min
We want to have some redundancy, but having 8 active at once seems
extreme; reduce to 4.
4 years ago
Jason Rhinelander c3637c81fd Remove another unused randomize parameter 4 years ago
Jason Rhinelander 24469daefb Remove unused parameter
We always randomize now.
4 years ago
Stephen Shelton 9dfcfbc3ac Bencode/decode relayOrder in lexigraphical order, make it uint64_t 4 years ago
Stephen Shelton 906803e387 Refactor DHT introset lookups to use redundant lookup strategy 4 years ago
Jeff Becker 4d4b33607f dont use optional 4 years ago
Jeff Becker 23bcfa4abb revert change 4 years ago
Jeff Becker df8c56343d refactor GetManyPathsWithUniqueEndpoints to go into service/endpoint_util.hpp 4 years ago
Jeff Becker fc5e6b4d77 log location 4 years ago
Jeff Becker 3cc2adae31 paralell publish and lookups 4 years ago
Jeff Becker e30c720446 redundant publish for service endpoint 4 years ago
Jeff Becker 2b6f27d60d
remove connect back logic for dead inbound sessions 4 years ago
Jeff 671c765161
Merge pull request #1085 from majestrate/check-for-initial-current-introset-2020-02-06
check for current introset being zero (initial state)
4 years ago
Jeff Becker 792fd4132c
only make default endpoint non-reachable if no keyfile option presented 4 years ago
Jeff Becker 6c67cc1f01
make default endpoint non reachable by default 4 years ago
Jeff Becker 70eb353c42
make publishing introsets optional using reachable=false to disable 4 years ago
Jeff Becker 5b87a9419e
default recursion depth to 2 not 12 4 years ago
Jeff Becker 8c698a1cd1
* rename i to foundIntro
* check for zero timestamp
* use > not >=
4 years ago
Jeff Becker 41210a8ae1
check for current introset being zero (initial state) 4 years ago
Stephen Shelton 37e4f26be1
s/LogInfo/LogDebug @ 'signed/verify encrypted introset' 4 years ago
Jeff Becker e6174efa21
don't derive x25519 key from ed25519 key 4 years ago
Jason Rhinelander f1171ed7a2 make format 😠 🤮 4 years ago
Jason Rhinelander 46f3459b79 Fixed EncryptedIntroSet signing to use PrivateKey
We can generate both root and derived signatures from a PrivateKey, but
only root from a SecretKey, so just change it to use a PrivateKey.
4 years ago
Jason Rhinelander 860c5efd47 Derived key fixes
The reason things weren't working here is because libsodium does
something completely unintuitive and called the seed the "secret key"
when it isn't, it's the seed.

This adds a new PrivateKey class (alongside the existing SecretKey and
PubKey) that holds just a private key value but no seed -- which we need
to do because there is no way we can get a seed after calculating a
derived keypair.

With these changes, we now generate exactly the same keys and subkeys as
Tor (and a new test case uses values generated in Tor to verify this).

This is incomplete -- the subkey signing code is still not implemented;
it has to be adapted to create a signature from a PrivateKey rather than
a SecretKey which will probably requiring working around/reimplementing
some of what libsodium does for creating a signature since it expects
"secret keys" i.e. the seed.
4 years ago
Jeff Becker 0f13591802
does not work 4 years ago
Jeff Becker 99eb7726ff
initial dht key blinding 4 years ago
Jeff Becker e87b754906
fix recursion depth on introset lookup 5 years ago
Jeff Becker 2c0dc12f39
refactor single char variables in DHT (mostly) 5 years ago
Jeff Becker 3b66cf6e75
dht fixes, disable iterative lookups on clients, revert "fixes" from 0.6.3, pass in recursion depth from introset lookup 5 years ago
Jeff Becker a17b5f25b5
check for zero'd rc 5 years ago
Jeff 0e2c5736a8
Merge pull request #1034 from majestrate/dht-timeout-fixes-2020-01-10
dht timeout tweak
5 years ago
Jeff 0ad2809ac7
Merge pull request #1033 from majestrate/prevent-segfault-2020-01-10
prevent segfault
5 years ago
Jeff Becker 8bb492da6e
dht timeout tweak 5 years ago
Jeff Becker 77f0944d6d
use shared_from_this 5 years ago
Jeff Becker 78e325c4c5
always lookup introset from nearest router 5 years ago
Jeff Becker 2d82e931da
try doing lookup from close router, randomize when above lookup threshold 5 years ago
Jeff Becker 8a5365d9a6
diversify endpoints 5 years ago
Jeff Becker c1ad5f955a
remove mutex 5 years ago
Jeff Becker 3147e2d357
shuffle intros when more than 1 exists 5 years ago
Jeff Becker b3ad65f470
randomize intro order on shift 5 years ago
Jeff Becker 79badd6714
* clients expore dht faster
* use random path when doing dht lookups for .loki
5 years ago
Jeff Becker 5ae428a114
Revert "remove call to link manager"
This reverts commit 3dd36fa11a.
5 years ago
Jeff Becker a5121c346c
remove call to link manager 5 years ago
Jeff Becker d1a29884df
client side perf improvement 5 years ago
Jeff Becker 79c3c748e4
limit number of snode sessions client side 5 years ago
Jeff Becker 8b8d636ded
make format 5 years ago
Thomas Winget 71bb0dd520 implement timers using libuv
So far only a bit of the code using timers has been modified to use
the new libuv-based timers.  Also only the non-Windows case has been
implemented.  Seems to be working though, so it's a good time to commit.
5 years ago
Jeff Becker 7f6d1ebb92
fix slow start bug 5 years ago
Stephen Shelton 5d3cb8f405 Include error code in log output in Identity::EnsureKeys() 5 years ago
Stephen Shelton 2c6226f54a Backup SNApp keys when migrating to new ed25519 crypto 5 years ago
Stephen Shelton 66a058a2af Make format 5 years ago
Stephen Shelton 93b8832026
Merge branch 'dev' into private-keys-backup-support 5 years ago
Jeff Becker 28a2d471d6 style nitch 5 years ago
Jeff Becker 44e0e2c034 dont flood the logic queue 5 years ago
Jeff Becker 0828307906 fix address mapping bug 5 years ago
Jeff Becker 8849173112 try async decrypt then verify 5 years ago
Jeff Becker 285a9a1dd5 prevent segfault 5 years ago
Jeff Becker ba0fd223d9 reduce number of jobs we put onto the logic thread 5 years ago
Jeff Becker 56dce90de9
add trace log level for tracking logic thread jobs 5 years ago
Stephen Shelton db56e17c23 Rename bencode function for clarity 5 years ago
Jeff Becker 1a864832c8
make format 5 years ago
Thomas Winget 23a9773e1e
remove our paths from outbound queues 5 years ago
Jeff Becker 2c5561fc3c
make format 5 years ago
Jeff Becker 7ee026fa50
make path builds work again 5 years ago
Jeff Becker 2bf1e4f46a
enable IOS on IOS 5 years ago
jeff c26b67c379 finish wiring up jni shizz 5 years ago
jeff 52757fef0e Merge remote-tracking branch 'micheal/background_mode' into vpn-api-2019-10-03 5 years ago
jeff 32ed821763 Merge remote-tracking branch 'upstream/dev' into multithreaded-cryptography 5 years ago
jeff f9fb40f590 final touches 5 years ago
jeff 7c691cf334 handover should be fixed now 5 years ago
Jeff Becker 993e4c2637
try fixing handover 5 years ago
jeff 6c2ebbb925 try fixing handover and add snapp traffic to multithreaded crypto workers 5 years ago
Jeff Becker 327c545530
finish multithread cryptography first pass 5 years ago
jeff 14c9ef15ed try calling stuff in logic thread from event loop 5 years ago
Jeff Becker 1adae338ce
Merge remote-tracking branch 'origin/master' 5 years ago
Michael edd0ec398f
Move thread stuff to subdirectory 5 years ago
Michael 4d8fe2a8a8
Move meta programming to subdirectory 5 years ago
Michael 1aec0dfa2b
Move logging to subdirectory 5 years ago
Jeff Becker c01112e4b7
tracy lock contention testing and other fun things 5 years ago
Jeff 093021ef99 try fixing handover drop bug 5 years ago
Jeff Becker eabbb83149
use estimated build time instead of expiration time for delta when determining when to space out builds 5 years ago
Jeff Becker e0424a91a7
bump path build handover window, check cooldown on build. 5 years ago
Jeff Becker 3c3338e801
Merge remote-tracking branch 'origin/master' into memlink 5 years ago
Michael 094b697b01
Replace StatusObject with underlying JSON type 5 years ago
Michael 16cdfbd5f0
clang-tidy modernize pass 5 years ago
Jeff Becker fdbb2e8dc8
make format 5 years ago
Jeff Becker 847fcdf5f3
move convotag missmatch check to the right place 5 years ago
Michael 84601fa474
Make format 5 years ago
Michael d1990b5e93
Fix suspicious thread-unsafety 5 years ago
Jeff da4f1ddb0a
Merge pull request #757 from majestrate/master
don't expire based on reply intro
5 years ago
Jeff c2c4f61ded don't expire based on reply intro 5 years ago
Jeff Becker c1f33bb1ac
initial mempipe implementation 5 years ago
Jeff Becker e3d13fc2a0
drop missmatched convotags 5 years ago
Michael f9e9227e19
Fix gcc trunk warnings 5 years ago
Michael 4763888d2c
Add fail-able docker build for gcc trunk 5 years ago
Jeff Becker db2206664a
fix crashes in testnet 5 years ago
Jeff Becker 7a3c8e5ca0
set limits correctly 5 years ago
Jeff Becker f48754c45d
make hop count and length configurable 5 years ago
Jeff Becker d465400840
revert 5 years ago