@@ -41,17 +41,17 @@ frameReceiver ctx mkreq recvN = loop `E.catch` sendGoaway
4141 | Just (ConnectionError err msg) <- E.fromException e = do
4242 csid <- readIORef currentStreamId
4343 let frame = goawayFrame csid err msg
44− enqueue outputQ 0 controlPriority $ OGoaway frame
44+ enqueueControl outputQ 0 $ OGoaway frame
4545 | otherwise = return ()
4646
4747 sendReset err sid = do
4848 let frame = resetFrame err sid
49− enqueue outputQ 0 controlPriority $ OFrame frame
49+ enqueueControl outputQ 0 $ OFrame frame
5050
5151 loop = do
5252 hd <- recvN frameHeaderLength
5353 if BS.null hd then
54− enqueue outputQ 0 controlPriority OFinish
54+ enqueueControl outputQ 0 OFinish
5555 else do
5656 cont <- processStreamGuardingError $ decodeFrameHeader hd
5757 when cont loop
@@ -92,7 +92,7 @@ frameReceiver ctx mkreq recvN = loop `E.catch` sendGoaway
9292 control ftyp header pl ctx
9393 | otherwise = do
9494 checkContinued
95− strm@Stream{streamState,streamContentLength,streamPriority} <- getStream
95+ strm@Stream{streamState,streamContentLength,streamPrecedence} <- getStream
9696 pl <- recvN payloadLength
9797 state <- readIORef streamState
9898 state' <- stream ftyp header pl ctx state strm
@@ -103,7 +103,7 @@ frameReceiver ctx mkreq recvN = loop `E.catch` sendGoaway
103103 Just vh -> do
104104 when (isJust (vhCL vh) && vhCL vh /= Just 0) $
105105 E.throwIO $ StreamError ProtocolError streamId
106− writeIORef streamPriority pri
106+ writeIORef streamPrecedence $ toPrecedence pri
107107 writeIORef streamState HalfClosed
108108 let req = mkreq vh (return "")
109109 atomically $ writeTQueue inputQ $ Input strm req
@@ -113,7 +113,7 @@ frameReceiver ctx mkreq recvN = loop `E.catch` sendGoaway
113113 case validateHeaders hdr of
114114 Just vh -> do
115115 q <- newTQueueIO
116− writeIORef streamPriority pri
116+ writeIORef streamPrecedence $ toPrecedence pri
117117 writeIORef streamState (Open (Body q))
118118 writeIORef streamContentLength $ vhCL vh
119119 readQ <- newReadBody q
@@ -186,7 +186,7 @@ control FrameSettings header@FrameHeader{flags} bs Context{http2settings, output
186186 unless (testAck flags) $ do
187187 modifyIORef http2settings $ \old -> updateSettings old alist
188188 let frame = settingsFrame setAck []
189− enqueue outputQ 0 controlPriority $ OSettings frame alist
189+ enqueueControl outputQ 0 $ OSettings frame alist
190190 return True
191191
192192control FramePing FrameHeader{flags} bs Context{outputQ} =
@@ -194,11 +194,11 @@ control FramePing FrameHeader{flags} bs Context{outputQ} =
194194 E.throwIO $ ConnectionError ProtocolError "the ack flag of this ping frame must not be set"
195195 else do
196196 let frame = pingFrame bs
197− enqueue outputQ 0 controlPriority $ OFrame frame
197+ enqueueControl outputQ 0 $ OFrame frame
198198 return True
199199
200200control FrameGoAway _ _ Context{outputQ} = do
201− enqueue outputQ 0 controlPriority OFinish
201+ enqueueControl outputQ 0 OFinish
202202 return False
203203
204204control FrameWindowUpdate header bs Context{connectionWindow} = do
@@ -271,7 +271,7 @@ stream FrameData
271271 let frame1 = windowUpdateFrame 0 payloadLength
272272 frame2 = windowUpdateFrame streamNumber payloadLength
273273 frame = frame1 `BS.append` frame2
274− enqueue outputQ 0 controlPriority $ OFrame frame
274+ enqueueControl outputQ 0 $ OFrame frame
275275 atomically $ writeTQueue q body
276276 if endOfStream then do
277277 mcl <- readIORef streamContentLength
@@ -310,25 +310,26 @@ stream FrameWindowUpdate header@FrameHeader{streamId} bs _ s Stream{streamWindow
310310 atomically $ writeTVar streamWindow w
311311 return s
312312
313−stream FrameRSTStream header bs ctx _ strm = do
313+stream FrameRSTStream header bs _ _ strm = do
314314 RSTStreamFrame e <- guardIt $ decoderstStreamFrame header bs
315315 let cc = Reset e
316− closed strm cc ctx
316+ closed strm cc
317317 return $ Closed cc -- will be written to streamState again
318318
319−stream FramePriority header bs Context{outputQ} s Stream{streamNumber,streamPriority} = do
320− PriorityFrame newp <- guardIt $ decodePriorityFrame header bs
321− checkPriority newp streamNumber
319+stream FramePriority header bs Context{outputQ} s Stream{streamNumber,streamPrecedence} = do
320+ PriorityFrame newpri <- guardIt $ decodePriorityFrame header bs
321+ checkPriority newpri streamNumber
322322 -- checkme: this should be tested
323− oldp <- readIORef streamPriority
324− writeIORef streamPriority newp
323+ oldpre <- readIORef streamPrecedence
324+ let !newpre = toPrecedence newpri
325+ writeIORef streamPrecedence newpre
325326 if isIdle s then
326− prepare outputQ streamNumber newp
327+ prepare outputQ streamNumber newpri
327328 else do
328− mx <- delete outputQ streamNumber oldp
329+ mx <- delete outputQ streamNumber oldpre
329330 case mx of
330331 Nothing -> return ()
331− Just x -> enqueue outputQ streamNumber newp x
332+ Just x -> enqueue outputQ streamNumber newpre x
332333 return s
333334
334335-- this ordering is important