|
|
|
DHT messages
|
|
|
|
|
|
|
|
these messages can be either wrapped in a LIDM message or sent anonymously over a path
|
|
|
|
|
|
|
|
This document is currently out of date (probably)
|
|
|
|
|
|
|
|
|
|
|
|
find introduction message (FIM)
|
|
|
|
|
|
|
|
variant 1: recursively find an IS by SA
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "F",
|
|
|
|
I: 0 or 1 if iterative request,
|
|
|
|
S: "<32 bytes SA>",
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0
|
|
|
|
}
|
|
|
|
|
|
|
|
variant 2: recursively find many IS in a tag
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "F",
|
|
|
|
I: 0 or 1 if iterative request,
|
|
|
|
N: "<16 bytes topic tag>",
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0
|
|
|
|
}
|
|
|
|
|
|
|
|
got introduction message (GIM)
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "G",
|
|
|
|
I: [IS],
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0,
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
publish introduction message (PIM)
|
|
|
|
|
|
|
|
publish one IS to the DHT.
|
|
|
|
|
|
|
|
version 0 uses the SA of the IS as the keyspace location.
|
|
|
|
|
|
|
|
in the future the location will be determined by the dht kdf
|
|
|
|
which uses a shared random source to obfuscate keyspace location.
|
|
|
|
|
|
|
|
|
|
|
|
R is currently set to 0 by the sender.
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "I",
|
|
|
|
I: IS,
|
|
|
|
R: r_counter,
|
|
|
|
S: optional member 0 for immediate store otherwise non zero,
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0
|
|
|
|
}
|
|
|
|
|
|
|
|
if R is greater than 0, do a random walk, otherwise if we are
|
|
|
|
closer to the SA of the IS than anyone else we know in the DHT
|
|
|
|
store the IS for later lookup.
|
|
|
|
As of protocol version 0, R is always 0.
|
|
|
|
|
|
|
|
If S is provided store the IS for later lookup unconditionally,
|
|
|
|
decrement S by 1 and forward to dht peer who is next closest to
|
|
|
|
the SA of the IS. If S is greater than 3, don't store and discard
|
|
|
|
this message.
|
|
|
|
|
|
|
|
|
|
|
|
find router contact message (FRCM)
|
|
|
|
|
|
|
|
find a router by long term RC.k public key
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "R",
|
|
|
|
I: 0 or 1 if iterative lookup
|
|
|
|
K: "<32 byte public key of router>",
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0
|
|
|
|
}
|
|
|
|
|
|
|
|
TODO: document me
|
|
|
|
|
|
|
|
got router contact message (GRCM)
|
|
|
|
|
|
|
|
R is a list containing a single RC if found or is an empty list if not found
|
|
|
|
sent in reply to FRCM only
|
|
|
|
|
|
|
|
{
|
|
|
|
A: "S",
|
|
|
|
R: [RC],
|
|
|
|
T: transaction_id_uint64,
|
|
|
|
V: 0
|
|
|
|
}
|
|
|
|
|
|
|
|
* send a GRCM with R to requesters in all linked transactions
|
|
|
|
* terminate transaction with id T
|
|
|
|
|