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

Network.LibP2P.NAT.AutoNAT.Message

Description

AutoNAT v1 message encoding/decoding (protobuf).

Wire format from docs/10-nat-traversal.md: Message framing: [uvarint length][protobuf message] AutoNAT Message fields: type(1), dial(2), dialResponse(3) PeerInfo fields: id(1), addrs(2) Dial fields: peer(1) DialResponse fields: status(1), statusText(2), addr(3)

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

Synopsis

Types

data ResponseStatus Source #

AutoNAT response status. Wire values are non-contiguous: OK=0, E_DIAL_ERROR=100, E_DIAL_REFUSED=101, E_BAD_REQUEST=200, E_INTERNAL_ERROR=300.

data AutoNATPeerInfo Source #

AutoNAT peer info (nested message).

Constructors

AutoNATPeerInfo 

Fields

data AutoNATDial Source #

AutoNAT Dial sub-message.

Constructors

AutoNATDial 

Fields

Instances

Instances details
Show AutoNATDial Source # 
Instance details

Defined in Network.LibP2P.NAT.AutoNAT.Message

Eq AutoNATDial Source # 
Instance details

Defined in Network.LibP2P.NAT.AutoNAT.Message

data AutoNATDialResponse Source #

AutoNAT DialResponse sub-message.

Constructors

AutoNATDialResponse 

Fields

Protobuf encode/decode (no framing)

encodeAutoNATMessage :: AutoNATMessage -> ByteString Source #

Encode an AutoNATMessage to protobuf wire format (no length prefix).

decodeAutoNATMessage :: ByteString -> Either ParseError AutoNATMessage Source #

Decode an AutoNATMessage from protobuf wire format.

Wire framing (uvarint length prefix)

encodeAutoNATFramed :: AutoNATMessage -> ByteString Source #

Encode an AutoNATMessage with uvarint length prefix.

decodeAutoNATFramed :: Int -> ByteString -> Either String AutoNATMessage Source #

Decode an AutoNATMessage from uvarint-length-prefixed bytes.

Stream I/O helpers

writeAutoNATMessage :: StreamIO -> AutoNATMessage -> IO () Source #

Write a framed AutoNAT message to a stream.

readAutoNATMessage :: StreamIO -> Int -> IO (Either String AutoNATMessage) Source #

Read a framed AutoNAT message from a stream.

Status conversion helpers

responseStatusToWord :: ResponseStatus -> Word32 Source #

Convert ResponseStatus to wire value.

wordToResponseStatus :: Word32 -> Maybe ResponseStatus Source #

Convert wire value to ResponseStatus.

Constants

maxAutoNATMessageSize :: Int Source #

Maximum AutoNAT message size: 64 KiB.

autoNATProtocolId :: Text Source #

AutoNAT protocol identifier.