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 }