libp2p-hs-0.1.0.0: Haskell implementation of the libp2p networking stack
Safe HaskellNone
LanguageGHC2021

Network.LibP2P.DHT.Message

Description

DHT RPC message encoding/decoding (protobuf).

Wire format from docs/09-dht.md: Message framing: [uvarint length][protobuf message] Message fields: type(1), key(2), record(3), closerPeers(8), providerPeers(9) Record fields: key(1), value(2), timeReceived(5) Peer fields: id(1), addrs(2), connection(3)

Uses proto3-wire for protobuf encoding/decoding, same pattern as Identify.Message.

Synopsis

Types

data DHTRecord Source #

DHT record (protobuf Message.Record).

Constructors

DHTRecord 

Fields

Instances

Instances details
Show DHTRecord Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

Eq DHTRecord Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

data DHTPeer Source #

DHT peer info (protobuf Message.Peer).

Constructors

DHTPeer 

Fields

Instances

Instances details
Show DHTPeer Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

Eq DHTPeer Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

Methods

(==) :: DHTPeer -> DHTPeer -> Bool #

(/=) :: DHTPeer -> DHTPeer -> Bool #

data DHTMessage Source #

DHT RPC message (protobuf Message).

Constructors

DHTMessage 

Fields

Instances

Instances details
Show DHTMessage Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

Eq DHTMessage Source # 
Instance details

Defined in Network.LibP2P.DHT.Message

Protobuf encode/decode (no framing)

encodeDHTMessage :: DHTMessage -> ByteString Source #

Encode a DHTMessage to protobuf wire format (no length prefix).

decodeDHTMessage :: ByteString -> Either ParseError DHTMessage Source #

Decode a DHTMessage from protobuf wire format.

Wire framing (uvarint length prefix)

encodeFramed :: DHTMessage -> ByteString Source #

Encode a DHTMessage with uvarint length prefix.

decodeFramed :: Int -> ByteString -> Either String DHTMessage Source #

Decode a DHTMessage from uvarint-length-prefixed bytes.

Stream I/O helpers

writeFramedMessage :: StreamIO -> DHTMessage -> IO () Source #

Write a framed DHT message to a stream.

readFramedMessage :: StreamIO -> Int -> IO (Either String DHTMessage) Source #

Read a framed DHT message from a stream. Reads the uvarint length prefix, then the protobuf payload.

Constants

maxDHTMessageSize :: Int Source #

Maximum DHT message size: 64 KiB.

Defaults

emptyDHTMessage :: DHTMessage Source #

Default empty message (FIND_NODE with empty key, no record, no peers).