pull/453/head
Jeff Becker 5 years ago
parent 1deafe444a
commit 3a4d8f16a7
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -431,69 +431,60 @@ transfer one or more dht messages directly without a previously made path.
}
link immediate SML message (LISM)
link immediate state message (LISM)
transfer an SML message between nodes
transfer a state message between nodes
{
a: "s",
s: SMLMessage,
s: state_message,
v: 0
}
----
Stateles Mesh Layer (SML)
As a censor circumvention method layer 4 (udp) or layer 2 (ethernet)
network bridges are used to stateless route messages to the main onion
routing network in a stateless manner such that these network bridges
can be cacsaded many layers deep. The incentive to run these would be
the ability to hide your traffic shape in the shape of others without
the need to excess node churn.
stateless mesh discovery protocol (SMDP)
---
protocol for detecting and discovering mesh local
topology and where the mainline network is.
state message:
TODO: implement me
service node joined network
stateless mesh layer (SML)
{
A: "J",
R: "<32 bytes public key>",
V: 0
}
similar to link layer messeages but sent over the connectivity mesh layer that
uses ethernet.
service node parted network
SML messages MUST be contained inside a LISM when not over ethernet.
{
A: "P",
R: "<32 bytes public key>",
V: 0
}
SML message MUST be routed to the recipiant if we are not the recipiant based
on the currently unspecified stateless routing protocol.
service node list request
TODO: implement routing protocol :^)
request the service node list starting at index O containing R entries
{
a: protocol_id_uint16,
r: "<32 bytes public identity key of recipiant>",
s: "<32 bytes public identity key of sender>",
t: "<1280 bytes payload>",
v: 0,
z: "<64 bytes signature generated by sender>"
A: "R",
O: starting_offset_int,
R: number_of_entires_to_request_int,
V: 0
}
protocol values:
0 - mesh discovery
t is a SMDP frame (todo: specify me)
1 - direct chat
t is a NUL padded plaintext chat message for node opers to communicate between
nodes.
service node list response
2 - relayed data packet
t is a udp packet relayed from a client behind a client.
response to service node list request
3 - snode to snode direct ip traffic
t is an ip packet for "0 hop" direct ip traffic between service nodes
{
A: "L",
S: {
"<32 bytes pubkey>" : first_seen_time_uint64,
"<32 bytes pubkey>" : first_seen_time_uint64,
....
},
V: 0
}
---

@ -18,6 +18,7 @@
#include <path/path.hpp>
#include <router/abstractrouter.hpp>
#include <util/logic.hpp>
#include <nodedb.hpp>
#include <vector>
@ -207,6 +208,12 @@ namespace llarp
return router;
}
bool
GetRCFromNodeDB(const Key_t& k, llarp::RouterContact& rc) const override
{
return router->nodedb()->Get(k.as_array(), rc);
}
PendingIntrosetLookups _pendingIntrosetLookups;
PendingTagLookups _pendingTagLookups;
PendingRouterLookups _pendingRouterLookups;

@ -130,6 +130,9 @@ namespace llarp
virtual llarp::AbstractRouter*
GetRouter() const = 0;
virtual bool
GetRCFromNodeDB(const Key_t& k, llarp::RouterContact& rc) const = 0;
virtual const Key_t&
OurKey() const = 0;

@ -167,7 +167,7 @@ namespace llarp
replies.emplace_back(new GotRouterMessage(k, txid, {found}, false));
return true;
}
else if(dht.GetRouter()->nodedb()->Get(K, found))
else if(dht.GetRCFromNodeDB(k, found))
{
replies.emplace_back(new GotRouterMessage(k, txid, {found}, false));
return true;

@ -39,8 +39,8 @@ namespace llarp
ServiceAddressLookup::GetNextPeer(Key_t &next,
const std::set< Key_t > &exclude)
{
Key_t k = target.ToKey();
auto nodes = parent->Nodes();
Key_t k = target.ToKey();
const auto &nodes = parent->Nodes();
if(nodes)
{
return nodes->FindCloseExcluding(k, next, exclude);

@ -140,21 +140,15 @@ namespace llarp
TXHolder< K, V, K_Hash, requestTimeoutMS >::NotFound(
const TXOwner& from, const std::unique_ptr< Key_t >& next)
{
bool sendReply = true;
auto txitr = tx.find(from);
auto txitr = tx.find(from);
if(txitr == tx.end())
{
return;
}
// ask for next peer
if(txitr->second->AskNextPeer(from.node, next))
{
sendReply = false;
}
llarp::LogWarn("Target key ", txitr->second->target);
Inform(from, txitr->second->target, {}, sendReply, sendReply);
if(!txitr->second->AskNextPeer(from.node, next))
Inform(from, txitr->second->target, {}, true, true);
}
template < typename K, typename V, typename K_Hash,

@ -62,6 +62,9 @@ namespace llarp
MOCK_METHOD2(RelayRequestForPath,
bool(const PathID_t& localPath, const dht::IMessage* msg));
MOCK_CONST_METHOD2(GetRCFromNodeDB,
bool(const dht::Key_t& k, RouterContact& rc));
MOCK_METHOD6(PropagateIntroSetTo,
void(const dht::Key_t& source, uint64_t sourceTX,
const service::IntroSet& introset,

Loading…
Cancel
Save