mirror of
https://github.com/go-i2p/go-i2p.git
synced 2025-06-08 10:32:04 -04:00
150 lines
5.3 KiB
Go
150 lines
5.3 KiB
Go
package i2np
|
|
|
|
import (
|
|
"github.com/hkparker/go-i2p/lib/common"
|
|
)
|
|
|
|
/*
|
|
I2P I2NP DatabaseLookup
|
|
https://geti2p.net/spec/i2np
|
|
Accurate for version 0.9.28
|
|
|
|
+----+----+----+----+----+----+----+----+
|
|
| SHA256 hash as the key to look up |
|
|
+ +
|
|
| |
|
|
+ +
|
|
| |
|
|
+ +
|
|
| |
|
|
+----+----+----+----+----+----+----+----+
|
|
| SHA256 hash of the routerInfo |
|
|
+ who is asking, or the gateway to +
|
|
| send the reply to |
|
|
+ +
|
|
| |
|
|
+ +
|
|
| |
|
|
+----+----+----+----+----+----+----+----+
|
|
|flag| reply_tunnelId | size | |
|
|
+----+----+----+----+----+----+----+ +
|
|
| SHA256 of $key1 to exclude |
|
|
+ +
|
|
| |
|
|
+ +
|
|
| |
|
|
+ +----+
|
|
| | |
|
|
+----+----+----+----+----+----+----+ +
|
|
| SHA256 of $key2 to exclude |
|
|
+ +
|
|
~ ~
|
|
+ +----+
|
|
| | |
|
|
+----+----+----+----+----+----+----+ +
|
|
| |
|
|
+ +
|
|
| Session key if reply encryption |
|
|
+ was requested +
|
|
| |
|
|
+ +----+
|
|
| |tags|
|
|
+----+----+----+----+----+----+----+----+
|
|
| |
|
|
+ +
|
|
| Session tags if reply encryption |
|
|
+ was requested +
|
|
| |
|
|
+ +
|
|
| |
|
|
+----+----+----+----+----+----+----+----+
|
|
|
|
key ::
|
|
32 bytes
|
|
SHA256 hash of the object to lookup
|
|
|
|
from ::
|
|
32 bytes
|
|
if deliveryFlag == 0, the SHA256 hash of the routerInfo entry this
|
|
request came from (to which the reply should be
|
|
sent)
|
|
if deliveryFlag == 1, the SHA256 hash of the reply tunnel gateway (to
|
|
which the reply should be sent)
|
|
|
|
flags ::
|
|
1 byte
|
|
bit order: 76543210
|
|
bit 0: deliveryFlag
|
|
0 => send reply directly
|
|
1 => send reply to some tunnel
|
|
bit 1: encryptionFlag
|
|
through release 0.9.5, must be set to 0
|
|
as of release 0.9.6, ignored
|
|
as of release 0.9.7:
|
|
0 => send unencrypted reply
|
|
1 => send AES encrypted reply using enclosed key and tag
|
|
bits 3-2: lookup type flags
|
|
through release 0.9.5, must be set to 00
|
|
as of release 0.9.6, ignored
|
|
as of release 0.9.16:
|
|
00 => normal lookup, return RouterInfo or LeaseSet or
|
|
DatabaseSearchReplyMessage
|
|
Not recommended when sending to routers
|
|
with version 0.9.16 or higher.
|
|
01 => LS lookup, return LeaseSet or
|
|
DatabaseSearchReplyMessage
|
|
10 => RI lookup, return RouterInfo or
|
|
DatabaseSearchReplyMessage
|
|
11 => exploration lookup, return DatabaseSearchReplyMessage
|
|
containing non-floodfill routers only (replaces an
|
|
excludedPeer of all zeroes)
|
|
bits 7-4:
|
|
through release 0.9.5, must be set to 0
|
|
as of release 0.9.6, ignored, set to 0 for compatibility with
|
|
future uses and with older routers
|
|
|
|
reply_tunnelId ::
|
|
4 byte TunnelID
|
|
only included if deliveryFlag == 1
|
|
tunnelId of the tunnel to send the reply to
|
|
|
|
size ::
|
|
2 byte Integer
|
|
valid range: 0-512
|
|
number of peers to exclude from the DatabaseSearchReplyMessage
|
|
|
|
excludedPeers ::
|
|
$size SHA256 hashes of 32 bytes each (total $size*32 bytes)
|
|
if the lookup fails, these peers are requested to be excluded
|
|
from the list in the DatabaseSearchReplyMessage.
|
|
if excludedPeers includes a hash of all zeroes, the request is
|
|
exploratory, and the DatabaseSearchReplyMessage is requested
|
|
to list non-floodfill routers only.
|
|
|
|
reply_key ::
|
|
32 byte SessionKey
|
|
only included if encryptionFlag == 1, only as of release 0.9.7
|
|
|
|
tags ::
|
|
1 byte Integer
|
|
valid range: 1-32 (typically 1)
|
|
the number of reply tags that follow
|
|
only included if encryptionFlag == 1, only as of release 0.9.7
|
|
|
|
reply_tags ::
|
|
one or more 32 byte SessionTags (typically one)
|
|
only included if encryptionFlag == 1, only as of release 0.9.7
|
|
*/
|
|
|
|
type DatabaseLookup struct {
|
|
Key common.Hash
|
|
From common.Hash
|
|
Flags byte
|
|
ReplyTunnelID [4]byte
|
|
Size int
|
|
ExcludedPeers []common.Hash
|
|
ReplyKey common.SessionKey
|
|
tags int
|
|
ReplyTags []common.SessionTag
|
|
}
|