summaryrefslogtreecommitdiff
path: root/src/Data
diff options
context:
space:
mode:
authorjim@bo <jim@bo>2018-06-21 15:30:12 -0400
committerjim@bo <jim@bo>2018-06-21 15:30:12 -0400
commitbd70e041e1c60687c161f7b70df4f6f8b39b300a (patch)
tree27218cfd281d65b078752d3a36b94f4f02506c7b /src/Data
parent722c795f771a85f29fb24aa0221823dc3caf459c (diff)
packet request handling, finished all todo stubs (needs test)
Diffstat (limited to 'src/Data')
-rw-r--r--src/Data/PacketQueue.hs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Data/PacketQueue.hs b/src/Data/PacketQueue.hs
index 93256474..e0221f5a 100644
--- a/src/Data/PacketQueue.hs
+++ b/src/Data/PacketQueue.hs
@@ -209,10 +209,22 @@ data OutGoingResult = OGSuccess | OGFull | OGEncodeFail
209readyOutGoing :: PacketOutQueue extra msg wire fromwire -> IO (STM extra) 209readyOutGoing :: PacketOutQueue extra msg wire fromwire -> IO (STM extra)
210readyOutGoing (PacketOutQueue {pktoToWireIO }) = pktoToWireIO 210readyOutGoing (PacketOutQueue {pktoToWireIO }) = pktoToWireIO
211 211
212getRequested :: STM extra -> PacketOutQueue extra msg wire fromwire -> Word32 -> [Word8] -> STM [Maybe (wire,Word32)] 212getRequested :: STM extra -> PacketOutQueue extra msg wire fromwire -> Word32 -> [Word8] -> STM [Maybe (Word32,wire)]
213getRequested _ _ _ [] = return [] 213getRequested _ _ _ [] = return []
214getRequested getExtra pktoq snum ns = do 214getRequested getExtra pktoq snum ns = do
215 error "todo getRequested" 215 let pnums = toPNums snum ns
216 indices = map toIndex pnums
217 forM indices $ \i -> readArray (pktq $ pktoOutPQ pktoq) i
218 where
219 toIndex :: Word32 -> Word32
220 toIndex = (`mod` qsize (pktoOutPQ pktoq))
221
222 toPNums :: Word32 -> [Word8] -> [Word32]
223 toPNums snum ns = reverse . snd $ foldl doOne ((snum - 1),[]) ns
224 where
225 doOne :: (Word32,[Word32]) -> Word8 -> (Word32,[Word32])
226 doOne (addend,as) 0 = (addend+255,as)
227 doOne (addend,as) x = (addend,(fromIntegral x + addend):as)
216 228
217peekPacket :: STM extra -> PacketOutQueue extra msg wire fromwire -> msg -> STM (Maybe (wire,Word32)) 229peekPacket :: STM extra -> PacketOutQueue extra msg wire fromwire -> msg -> STM (Maybe (wire,Word32))
218peekPacket getExtra q@(PacketOutQueue { pktoInPQ, pktoOutPQ, pktoPacketNo, pktoToWireIO, pktoToWire }) msg 230peekPacket getExtra q@(PacketOutQueue { pktoInPQ, pktoOutPQ, pktoPacketNo, pktoToWireIO, pktoToWire }) msg