Commit Graph
457 Commits
Author SHA1 Message Date
Simon Désaulniers b03a8b5b50 update license notice (2017) 2017-01-13 17:27:29 -05:00
Adrien Béraud 32f5175d68 dht: expire storage just on time 2017-01-13 16:06:46 -05:00
Adrien Béraud 7d3a54db57 dht: storage rate limiting 2017-01-13 16:06:46 -05:00
Adrien Béraud b6dca5ccd6 dht: use new NodeStats structure to provide stats 2017-01-10 23:34:56 -05:00
Adrien Béraud 23b2712400 dht: use SHA265 instead of SHA512 for the op token
The op token is renewed regularly (around every 30 minutes),
so SHA256 provides enough security for this non-sensitive token.
SHA256 takes 32 bytes instead of 64 bytes for SHA512,
and the token is included in every listen requests,
renewed every 30 seconds, and every answer to get.
In the context of limited bandwith usage, using SHA256 seems more appropriate.
This change is backward and forward compatible.
2017-01-10 23:34:56 -05:00
Adrien Béraud 19fdec96ca dht: remove getStatus with get 2017-01-09 14:38:51 -05:00
Adrien Béraud 2208a06232 dht: clear acked with announce
Clear the search node acked when clearing
the corresponding announce, after checking
the announce status for all announces.
2017-01-09 00:06:54 -05:00
Simon Désaulniers 620868b5d6 routing_table: complete connecting state resolution
After a connectivity change, the DHT would enter the "connecting" state in order
to try to resolve good nodes. However, the previous algorithm would
probabilistically increase time for completion each time a node would fail to
resolve. We now avoid this by prioritizing non-expired nodes in the process.
Also, a subtle error would sensibly stop the process for 30 minutes due to using
the Node::NODE_EXPIRE_TIME constant instead of Node::MAX_RESPONSE_TIME.
2017-01-03 17:48:40 -05:00
Adrien Béraud 7f84c1e397 utils: remove useless definitions 2016-11-23 15:12:37 -05:00
Adrien Béraud 42171efc3f dht: send values to all sockets for a node
We used to send values once to a given node,
however the receiving node may have canceled
or dropped the request since then,
so we now send the values for every socket and
the optimization will happen on the sending side.
2016-11-09 21:53:43 -05:00
Adrien Béraud cd36b13c30 dht: prevent infinite loop in expireStorage() 2016-11-07 16:56:08 -05:00
Simon Désaulniers ab7d1d6582 dht,net: introduce socket, support multiple listen
Since the initial implementation of listen operation, multiple listen requests
from a single node on a same hash was not possible without singular
inconsistencies. The flaw was coming from the fact that nodes receiving listen
request could not differentiate between listen refresh request and a new
independent listen request.

This patch introduces the new net::Socket structure which in time will enable
remote nodes to send update for a storage while differentiating between
concurrent listen requests. A socket has a unique identifier which consists of a
transaction id as defined in the OpenDHT protocol.
2016-11-07 06:44:15 -05:00
Simon Désaulniers 77ea6d8c2f net: create net namespace, moving relevant structs 2016-11-05 19:29:00 -04:00
Simon Désaulniers b5cd629160 dht: callback if no storage maintenance 2016-11-04 09:15:10 -04:00
Adrien Béraud 125b6f9236 dht: make storage maintenance optional, default disabled 2016-10-31 14:43:56 -04:00
Adrien Béraud 6036ccdbaa dht: try inserting new nodes smarter (#150)
Attempt closest search and nearby searches
until we are too far instead of trying every
search.
2016-10-28 15:46:27 -04:00
Adrien Béraud 274621dcec dht: add searches(sa_family) 2016-10-27 18:12:05 -04:00
Adrien Béraud 2ab756906d dht: getSearchLog for a specific search 2016-10-27 16:51:21 -04:00
Adrien Béraud 2b3f63443f dht: maintain each storage independently
Schedule every storage maintenance independently,
to improve performance when there are a lot of storages.
2016-10-27 14:21:52 -04:00
atraczyk d6fff53f6b bump visual studio support 2016-10-26 10:28:05 -04:00
Adrien Béraud f584c4849b dht: unify creation date normalisation 2016-10-24 02:09:38 -04:00
Adrien Béraud e3663c995a log: add storage filter 2016-10-24 02:09:38 -04:00
Adrien Béraud 1d62b3ca64 log: add InfoHash filter
* filter log entries with new method setLogFilter
* filter by node id, search or infohash
* add optional parameter to 'log' in dhtnode
2016-10-24 02:09:38 -04:00
Adrien Béraud 8c04ddc66b dht use proper value type to compute expiration 2016-10-23 14:58:15 -04:00
Adrien Béraud 5277b8d23e dht: storage refresh returns bool 2016-10-23 03:23:17 -04:00
Adrien Béraud 70b1ebae0b dht: fix scheduler job edition on clang 2016-10-21 17:44:39 -04:00
Adrien Béraud 9dc6004329 network engine: cancel request when clearing listen status 2016-10-19 13:58:18 -04:00
Simon Désaulniers 6c73e5fa5c dht: less cases clear values, storage maintenance 2016-10-19 11:53:47 -04:00
Simon Désaulniers 24edfb8eaf dht: uniformly sync SearchNodes reannouncing
Historically, the next announce timing was based on the last acknowledgement
received from a SearchNode. This behavior was invalid since the 'refresh'
operation. In fact, for a given value that was "refreshed", its creation time
would differ from the announcer's info. Therefor, all search node's
reannouncing timings would differ, hence causing inconsistency on the network.
2016-10-19 11:53:47 -04:00
Adrien Béraud 4ef5a2216e dht: revert to previous onNewNode behavior 2016-10-19 01:27:19 -04:00
Simon Désaulniers 09e41cc9f2 dht: appropriate time info in permanent put ops 2016-10-18 14:20:43 -04:00
Adrien Béraud 71ad92e286 dht: log cleanup 2016-10-17 17:55:22 -04:00
Adrien Béraud d4f3d3aa98 dht: add missing iterator 2016-10-17 17:14:30 -04:00
Simon Désaulniers c0612a1b2c dht: use "refresh" operation for permanent put 2016-10-17 11:56:54 -04:00
Simon Désaulniers 6743cbbf50 dht: introduce "refresh" operation
This operation requests a node to refresh a value's time_point information of
its lifetime begining. This is intended to fix the *permanent put* operation
which has been having syncing issues since the introduction of an enhanced and
lighter put operation.
2016-10-17 11:56:54 -04:00
Adrien Béraud da1bdf9d4c dht: retry nodes more aggressively in case of failure 2016-10-16 22:36:52 -04:00
Adrien Béraud 96da4cd85d build: make logs optional at build time 2016-10-16 22:36:42 -04:00
Adrien Béraud cfb817d37f dht: add buckets() utility 2016-10-16 22:36:30 -04:00
Adrien Béraud 9440c03048 dht: log cleanup 2016-10-16 22:36:24 -04:00
Adrien Béraud 7af856508e dht: make connectivityChanged family dependent 2016-10-15 19:13:15 -04:00
Adrien Béraud aaed64039a dht: fix compilation on clang 2016-10-12 15:02:02 -04:00
Adrien Béraud 013b1dfe2e Merge pull request #138 from sim590/connectivity-changes-detect
search: detect connectivity changes
2016-10-11 16:01:59 -04:00
Simon Désaulniers 733f699ff2 search: detect connectivity changes
The number of bad nodes is limited in order to help determine presence of
connectivity changes. See https://github.com/savoirfairelinux/opendht/issues/137
for details.

According to the tables, 25 is a good average value for big networks. If the
network is small, normal search expiration process will handle the situation.
2016-10-11 15:54:37 -04:00
Adrien Béraud eed8ffc792 Merge pull request #139 from savoirfairelinux/recover-from-network-changes
dhtrunner: recover from network changes
2016-10-11 11:57:31 -04:00
Adrien Béraud 64118404fe dhtrunner: recover from network changes
Using a list of bootstrap nodes, we recover from network loss by pinging those
nodes continuously until connected.
Written with Simon Désaulniers.
2016-10-10 01:51:26 -04:00
Simon Désaulniers bb74dc846c dht/dhtrunner: enable callback for pingNode 2016-10-10 00:23:53 -04:00
Adrien Béraud 659d893dee network: transmit large values in multiple packets 2016-10-09 16:22:33 -04:00
Adrien Béraud f53c7a6785 dht: keep track of storage usage in maintainStorage 2016-10-04 03:09:00 -04:00
Simon Désaulniers dc0b650aa3 dht: make sure we are synced before sending put 2016-09-23 19:27:59 -04:00
Simon Désaulniers 87cf6faedd dht/node: don't allow more than 3 auth errors 2016-09-23 19:27:59 -04:00