| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
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
- data AutoNATMessageType
- data ResponseStatus
- data AutoNATPeerInfo = AutoNATPeerInfo {
- anPeerId :: !ByteString
- anAddrs :: ![ByteString]
- data AutoNATDial = AutoNATDial {
- anDialPeer :: !(Maybe AutoNATPeerInfo)
- data AutoNATDialResponse = AutoNATDialResponse {
- anRespStatus :: !(Maybe ResponseStatus)
- anRespStatusText :: !(Maybe Text)
- anRespAddr :: !(Maybe ByteString)
- data AutoNATMessage = AutoNATMessage {}
- encodeAutoNATMessage :: AutoNATMessage -> ByteString
- decodeAutoNATMessage :: ByteString -> Either ParseError AutoNATMessage
- encodeAutoNATFramed :: AutoNATMessage -> ByteString
- decodeAutoNATFramed :: Int -> ByteString -> Either String AutoNATMessage
- writeAutoNATMessage :: StreamIO -> AutoNATMessage -> IO ()
- readAutoNATMessage :: StreamIO -> Int -> IO (Either String AutoNATMessage)
- responseStatusToWord :: ResponseStatus -> Word32
- wordToResponseStatus :: Word32 -> Maybe ResponseStatus
- maxAutoNATMessageSize :: Int
- autoNATProtocolId :: Text
Types
data AutoNATMessageType Source #
AutoNAT message type.
Constructors
| DIAL | |
| DIAL_RESPONSE |
Instances
| Show AutoNATMessageType Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> AutoNATMessageType -> ShowS # show :: AutoNATMessageType -> String # showList :: [AutoNATMessageType] -> ShowS # | |
| Eq AutoNATMessageType Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods (==) :: AutoNATMessageType -> AutoNATMessageType -> Bool # (/=) :: AutoNATMessageType -> AutoNATMessageType -> Bool # | |
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.
Constructors
| StatusOK | 0 |
| EDialError | 100 |
| EDialRefused | 101 |
| EBadRequest | 200 |
| EInternalError | 300 |
Instances
| Show ResponseStatus Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> ResponseStatus -> ShowS # show :: ResponseStatus -> String # showList :: [ResponseStatus] -> ShowS # | |
| Eq ResponseStatus Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods (==) :: ResponseStatus -> ResponseStatus -> Bool # (/=) :: ResponseStatus -> ResponseStatus -> Bool # | |
data AutoNATPeerInfo Source #
AutoNAT peer info (nested message).
Constructors
| AutoNATPeerInfo | |
Fields
| |
Instances
| Show AutoNATPeerInfo Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> AutoNATPeerInfo -> ShowS # show :: AutoNATPeerInfo -> String # showList :: [AutoNATPeerInfo] -> ShowS # | |
| Eq AutoNATPeerInfo Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods (==) :: AutoNATPeerInfo -> AutoNATPeerInfo -> Bool # (/=) :: AutoNATPeerInfo -> AutoNATPeerInfo -> Bool # | |
data AutoNATDial Source #
AutoNAT Dial sub-message.
Constructors
| AutoNATDial | |
Fields
| |
Instances
| Show AutoNATDial Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> AutoNATDial -> ShowS # show :: AutoNATDial -> String # showList :: [AutoNATDial] -> ShowS # | |
| Eq AutoNATDial Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message | |
data AutoNATDialResponse Source #
AutoNAT DialResponse sub-message.
Constructors
| AutoNATDialResponse | |
Fields
| |
Instances
| Show AutoNATDialResponse Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> AutoNATDialResponse -> ShowS # show :: AutoNATDialResponse -> String # showList :: [AutoNATDialResponse] -> ShowS # | |
| Eq AutoNATDialResponse Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods (==) :: AutoNATDialResponse -> AutoNATDialResponse -> Bool # (/=) :: AutoNATDialResponse -> AutoNATDialResponse -> Bool # | |
data AutoNATMessage Source #
AutoNAT top-level message.
Constructors
| AutoNATMessage | |
Fields
| |
Instances
| Show AutoNATMessage Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods showsPrec :: Int -> AutoNATMessage -> ShowS # show :: AutoNATMessage -> String # showList :: [AutoNATMessage] -> ShowS # | |
| Eq AutoNATMessage Source # | |
Defined in Network.LibP2P.NAT.AutoNAT.Message Methods (==) :: AutoNATMessage -> AutoNATMessage -> Bool # (/=) :: AutoNATMessage -> AutoNATMessage -> Bool # | |
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.