Skip to content

Commit dd44444

Browse files
committed
Define msHeaderLength
Define msHeaderLength and use it instead of 8 as hardcoded headerlength.
1 parent aefa0ff commit dd44444

File tree

6 files changed

+17
-13
lines changed

6 files changed

+17
-13
lines changed

network-mux/src/Network/Mux/Bearer/NamedPipe.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ namedPipeAsBearer sduSize tracer h =
4444
readNamedPipe :: Mx.TimeoutFn IO -> IO (Mx.SDU, Time)
4545
readNamedPipe _ = do
4646
traceWith tracer Mx.TraceRecvHeaderStart
47-
hbuf <- recvLen' True 8 []
47+
hbuf <- recvLen' True Mx.msHeaderLength []
4848
case Mx.decodeSDU hbuf of
4949
Left e -> throwIO e
5050
Right header@Mx.SDU { Mx.msHeader } -> do

network-mux/src/Network/Mux/Bearer/Pipe.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pipeAsBearer sduSize tracer channel =
8686
readPipe :: Mx.TimeoutFn IO -> IO (Mx.SDU, Time)
8787
readPipe _ = do
8888
traceWith tracer Mx.TraceRecvHeaderStart
89-
hbuf <- recvLen' 8 []
89+
hbuf <- recvLen' (fromIntegral Mx.msHeaderLength) []
9090
case Mx.decodeSDU hbuf of
9191
Left e -> throwIO e
9292
Right header@Mx.SDU { Mx.msHeader } -> do

network-mux/src/Network/Mux/Bearer/Socket.hs

+2-4
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,12 @@ socketAsBearer sduSize batchSize readBuffer_m sduTimeout tracer sd =
6666
Mx.name = "socket-bearer"
6767
}
6868
where
69-
hdrLenght = 8
70-
7169
readSocket :: Mx.TimeoutFn IO -> IO (Mx.SDU, Time)
7270
readSocket timeout = do
7371
traceWith tracer Mx.TraceRecvHeaderStart
7472

7573
-- Wait for the first part of the header without any timeout
76-
h0 <- recvAtMost True hdrLenght
74+
h0 <- recvAtMost True Mx.msHeaderLength
7775

7876
-- Optionally wait at most sduTimeout seconds for the complete SDU.
7977
r_m <- timeout sduTimeout $ recvRem h0
@@ -85,7 +83,7 @@ socketAsBearer sduSize batchSize readBuffer_m sduTimeout tracer sd =
8583

8684
recvRem :: BL.ByteString -> IO (Mx.SDU, Time)
8785
recvRem !h0 = do
88-
hbuf <- recvLen' (hdrLenght - BL.length h0) [h0]
86+
hbuf <- recvLen' (Mx.msHeaderLength - BL.length h0) [h0]
8987
case Mx.decodeSDU hbuf of
9088
Left e -> throwIO e
9189
Right header@Mx.SDU { Mx.msHeader } -> do

network-mux/src/Network/Mux/Egress.hs

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module Network.Mux.Egress
1616

1717
import Control.Monad
1818
import Data.ByteString.Lazy qualified as BL
19+
import Data.Int
1920

2021
import Control.Concurrent.Class.MonadSTM.Strict
2122
import Control.Monad.Class.MonadAsync
@@ -154,8 +155,8 @@ muxer egressQueue Bearer { writeMany, sduSize, batchSize } =
154155
maxSDUsPerBatch :: Int
155156
maxSDUsPerBatch = 100
156157

157-
sduLength :: SDU -> Int
158-
sduLength sdu = 8 + fromIntegral (msLength sdu)
158+
sduLength :: SDU -> Int64
159+
sduLength sdu = msHeaderLength + fromIntegral (msLength sdu)
159160

160161
-- Build a batch of SDUs to submit in one go to the bearer.
161162
-- The egress queue is still processed one SDU at the time
@@ -164,7 +165,7 @@ muxer egressQueue Bearer { writeMany, sduSize, batchSize } =
164165
-- (e.g the SO_SNDBUF for Socket) or number of SDUs.
165166
--
166167
buildBatch sdus _ | length sdus >= maxSDUsPerBatch = return sdus
167-
buildBatch sdus sdusLength | sdusLength >= batchSize = return sdus
168+
buildBatch sdus sdusLength | sdusLength >= fromIntegral batchSize = return sdus
168169
buildBatch sdus !sdusLength = do
169170
demand_m <- atomically $ tryReadTBQueue egressQueue
170171
case demand_m of

network-mux/src/Network/Mux/Types.hs

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module Network.Mux.Types
3636
, msNum
3737
, msDir
3838
, msLength
39+
, msHeaderLength
3940
, RemoteClockModel (..)
4041
, remoteClockPrecision
4142
, RuntimeError (..)
@@ -47,6 +48,7 @@ import Prelude hiding (read)
4748
import Control.Exception (Exception, SomeException)
4849
import Data.ByteString.Lazy qualified as BL
4950
import Data.Functor (void)
51+
import Data.Int
5052
import Data.Ix (Ix (..))
5153
import Data.Word
5254
import Foreign.Ptr (Ptr)
@@ -223,6 +225,9 @@ msDir = mhDir . msHeader
223225
msLength :: SDU -> Word16
224226
msLength = mhLength . msHeader
225227

228+
-- | Size of a MuxHeader in Bytes
229+
msHeaderLength :: Int64
230+
msHeaderLength = 8
226231

227232
-- | Low level access to underlying socket or pipe. There are three smart
228233
-- constructors:

network-mux/test/Test/Mux.hs

+4-4
Original file line numberDiff line numberDiff line change
@@ -274,12 +274,12 @@ instance Arbitrary ArbitrarySDU where
274274
invalidLenght = do
275275
ts <- arbitrary
276276
mid <- arbitrary
277-
realLen <- choose (0, 8) -- Size of mux header is 8
278-
len <- if realLen == 8 then return 0
279-
else arbitrary
277+
realLen <- choose (0, Mx.msHeaderLength)
278+
len <- if realLen == Mx.msHeaderLength then return 0
279+
else arbitrary
280280
p <- arbitrary
281281

282-
return $ ArbitraryInvalidSDU (InvalidSDU (Mx.RemoteClockModel ts) mid len realLen p)
282+
return $ ArbitraryInvalidSDU (InvalidSDU (Mx.RemoteClockModel ts) mid len (fromIntegral realLen) p)
283283
(Mx.SDUDecodeError "")
284284

285285
instance Arbitrary Mx.BearerState where

0 commit comments

Comments
 (0)