mirror of
https://github.com/go-i2p/go-i2p.git
synced 2025-07-04 13:32:52 -04:00
97 lines
3.1 KiB
Go
97 lines
3.1 KiB
Go
![]() |
package i2np
|
||
|
|
||
|
import (
|
||
|
"github.com/hkparker/go-i2p/lib/common"
|
||
|
)
|
||
|
|
||
|
/*
|
||
|
I2P I2NP DatabaseStore
|
||
|
https://geti2p.net/spec/i2np
|
||
|
Accurate for version 0.9.28
|
||
|
|
||
|
with reply token:
|
||
|
+----+----+----+----+----+----+----+----+
|
||
|
| SHA256 Hash as key |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+----+----+----+----+----+----+----+----+
|
||
|
|type| reply token | reply_tunnelId
|
||
|
+----+----+----+----+----+----+----+----+
|
||
|
| SHA256 of the gateway RouterInfo |
|
||
|
+----+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +----+----+----+----+----+----+----+
|
||
|
| | data ...
|
||
|
+----+-//
|
||
|
|
||
|
with reply token == 0:
|
||
|
+----+----+----+----+----+----+----+----+
|
||
|
| SHA256 Hash as key |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+ +
|
||
|
| |
|
||
|
+----+----+----+----+----+----+----+----+
|
||
|
|type| 0 | data ...
|
||
|
+----+----+----+----+----+-//
|
||
|
|
||
|
key ::
|
||
|
32 bytes
|
||
|
SHA256 hash
|
||
|
|
||
|
type ::
|
||
|
1 byte
|
||
|
type identifier
|
||
|
bit 0:
|
||
|
0 RouterInfo
|
||
|
1 LeaseSet
|
||
|
bits 7-1:
|
||
|
Through release 0.9.17, must be 0
|
||
|
As of release 0.9.18, ignored, reserved for future options, set to 0 for compatibility
|
||
|
|
||
|
reply token ::
|
||
|
4 bytes
|
||
|
If greater than zero, a DeliveryStatusMessage
|
||
|
is requested with the Message ID set to the value of the Reply Token.
|
||
|
A floodfill router is also expected to flood the data to the closest floodfill peers
|
||
|
if the token is greater than zero.
|
||
|
|
||
|
reply_tunnelId ::
|
||
|
4 byte TunnelId
|
||
|
Only included if reply token > 0
|
||
|
This is the TunnelId of the inbound gateway of the tunnel the response should be sent to
|
||
|
If $reply_tunnelId is zero, the reply is sent directy to the reply gateway router.
|
||
|
|
||
|
reply gateway ::
|
||
|
32 bytes
|
||
|
Hash of the RouterInfo entry to reach the gateway
|
||
|
Only included if reply token > 0
|
||
|
If $reply_tunnelId is nonzero, this is the router hash of the inbound gateway
|
||
|
of the tunnel the response should be sent to.
|
||
|
If $reply_tunnelId is zero, this is the router hash the response should be sent to.
|
||
|
|
||
|
data ::
|
||
|
If type == 0, data is a 2-byte Integer specifying the number of bytes that follow,
|
||
|
followed by a gzip-compressed RouterInfo.
|
||
|
If type == 1, data is an uncompressed LeaseSet.
|
||
|
*/
|
||
|
|
||
|
type DatabaseStore struct {
|
||
|
Key common.Hash
|
||
|
Type byte
|
||
|
ReplyToken [4]byte
|
||
|
ReplyTunnelID [4]byte
|
||
|
ReplyGateway common.Hash
|
||
|
Data []byte
|
||
|
}
|