forked from schmittlauch/Hash2Pub
fix ASN.1 container parsing
This commit is contained in:
parent
2f10ea6628
commit
91bb72cb57
|
@ -201,7 +201,7 @@ encodePayload payload'@QueryIDResponsePayload{} =
|
|||
Start Sequence
|
||||
: encodeQueryResult resp
|
||||
: case resp of
|
||||
FOUND _ -> []
|
||||
FOUND ns -> encodeNodeState $ ns
|
||||
FORWARD entrySet ->
|
||||
Start Sequence
|
||||
: (concatMap encodeCacheEntry . Set.elems $ entrySet)
|
||||
|
@ -314,8 +314,7 @@ parseRequest action = do
|
|||
sender <- parseNodeState
|
||||
parts <- parseInteger
|
||||
part <- parseInteger
|
||||
payload <- onNextContainer Sequence $
|
||||
case action of
|
||||
payload <- case action of
|
||||
QueryID -> parseQueryIDRequest
|
||||
Join -> parseJoinRequest
|
||||
Leave -> parseLeaveRequest
|
||||
|
@ -330,18 +329,12 @@ parseResponse responseTo = do
|
|||
parts <- parseInteger
|
||||
part <- parseInteger
|
||||
action <- parseEnum :: ParseASN1 Action
|
||||
payload <- onNextContainer Sequence $
|
||||
case action of
|
||||
payload <- case action of
|
||||
QueryID -> parseQueryIDResponse
|
||||
Join -> parseJoinResponse
|
||||
Leave -> parseLeaveResponse
|
||||
Stabilise -> parseStabiliseResponse
|
||||
Ping -> parsePingResponse
|
||||
-- consume sequence end
|
||||
end <- getNext
|
||||
case end of
|
||||
End Sequence -> return ()
|
||||
x -> throwParseError $ "unexpected ASN.1 element " ++ show x
|
||||
|
||||
return $ Response responseTo senderID parts part action payload
|
||||
|
||||
|
@ -414,7 +407,7 @@ parseJoinRequest = do
|
|||
return JoinRequestPayload
|
||||
|
||||
parseJoinResponse :: ParseASN1 ActionPayload
|
||||
parseJoinResponse = do
|
||||
parseJoinResponse = onNextContainer Sequence $ do
|
||||
succ' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
pred' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
cache <- parseNodeCache
|
||||
|
@ -425,7 +418,7 @@ parseJoinResponse = do
|
|||
}
|
||||
|
||||
parseQueryIDRequest :: ParseASN1 ActionPayload
|
||||
parseQueryIDRequest = do
|
||||
parseQueryIDRequest = onNextContainer Sequence $ do
|
||||
targetID <- fromInteger <$> parseInteger
|
||||
lBestNodes <- parseInteger
|
||||
return $ QueryIDRequestPayload {
|
||||
|
@ -434,7 +427,7 @@ parseQueryIDRequest = do
|
|||
}
|
||||
|
||||
parseQueryIDResponse :: ParseASN1 ActionPayload
|
||||
parseQueryIDResponse = do
|
||||
parseQueryIDResponse = onNextContainer Sequence $ do
|
||||
Enumerated resultType <- getNext
|
||||
result <- case resultType of
|
||||
0 -> FOUND <$> parseNodeState
|
||||
|
@ -450,7 +443,7 @@ parseStabiliseRequest = do
|
|||
return StabiliseRequestPayload
|
||||
|
||||
parseStabiliseResponse :: ParseASN1 ActionPayload
|
||||
parseStabiliseResponse = do
|
||||
parseStabiliseResponse = onNextContainer Sequence $ do
|
||||
succ' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
pred' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
return $ StabiliseResponsePayload {
|
||||
|
@ -459,7 +452,7 @@ parseStabiliseResponse = do
|
|||
}
|
||||
|
||||
parseLeaveRequest :: ParseASN1 ActionPayload
|
||||
parseLeaveRequest = do
|
||||
parseLeaveRequest = onNextContainer Sequence $ do
|
||||
succ' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
pred' <- map fromInteger <$> onNextContainer Sequence (getMany parseInteger)
|
||||
return $ LeaveRequestPayload {
|
||||
|
@ -478,7 +471,7 @@ parsePingRequest = do
|
|||
return PingRequestPayload
|
||||
|
||||
parsePingResponse :: ParseASN1 ActionPayload
|
||||
parsePingResponse = do
|
||||
parsePingResponse = onNextContainer Sequence $ do
|
||||
handledNodes <- getMany parseNodeState
|
||||
return $ PingResponsePayload {
|
||||
pingNodeStates = handledNodes
|
||||
|
|
Loading…
Reference in a new issue