| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
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
- data MessageType
- data DHTRecord = DHTRecord {
- recKey :: !ByteString
- recValue :: !ByteString
- recTimeReceived :: !Text
- data DHTPeer = DHTPeer {}
- data DHTMessage = DHTMessage {
- msgType :: !MessageType
- msgKey :: !ByteString
- msgRecord :: !(Maybe DHTRecord)
- msgCloserPeers :: ![DHTPeer]
- msgProviderPeers :: ![DHTPeer]
- encodeDHTMessage :: DHTMessage -> ByteString
- decodeDHTMessage :: ByteString -> Either ParseError DHTMessage
- encodeFramed :: DHTMessage -> ByteString
- decodeFramed :: Int -> ByteString -> Either String DHTMessage
- writeFramedMessage :: StreamIO -> DHTMessage -> IO ()
- readFramedMessage :: StreamIO -> Int -> IO (Either String DHTMessage)
- maxDHTMessageSize :: Int
- emptyDHTMessage :: DHTMessage
Types
data MessageType Source #
DHT RPC message type (protobuf enum).
Constructors
| PutValue | 0 |
| GetValue | 1 |
| AddProvider | 2 |
| GetProviders | 3 |
| FindNode | 4 |
Instances
| Bounded MessageType Source # | |
Defined in Network.LibP2P.DHT.Message | |
| Enum MessageType Source # | |
Defined in Network.LibP2P.DHT.Message Methods succ :: MessageType -> MessageType # pred :: MessageType -> MessageType # toEnum :: Int -> MessageType # fromEnum :: MessageType -> Int # enumFrom :: MessageType -> [MessageType] # enumFromThen :: MessageType -> MessageType -> [MessageType] # enumFromTo :: MessageType -> MessageType -> [MessageType] # enumFromThenTo :: MessageType -> MessageType -> MessageType -> [MessageType] # | |
| Show MessageType Source # | |
Defined in Network.LibP2P.DHT.Message Methods showsPrec :: Int -> MessageType -> ShowS # show :: MessageType -> String # showList :: [MessageType] -> ShowS # | |
| Eq MessageType Source # | |
Defined in Network.LibP2P.DHT.Message | |
DHT record (protobuf Message.Record).
Constructors
| DHTRecord | |
Fields
| |
DHT peer info (protobuf Message.Peer).
Constructors
| DHTPeer | |
Fields
| |
data DHTMessage Source #
DHT RPC message (protobuf Message).
Constructors
| DHTMessage | |
Fields
| |
Instances
| Show DHTMessage Source # | |
Defined in Network.LibP2P.DHT.Message Methods showsPrec :: Int -> DHTMessage -> ShowS # show :: DHTMessage -> String # showList :: [DHTMessage] -> ShowS # | |
| Eq DHTMessage Source # | |
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).