@@ -1,6 +1,15 @@
11{-# LANGUAGE BangPatterns #-}
22
3−module Network.Wai.Handler.Warp.Buffer where
3+module Network.Wai.Handler.Warp.Buffer (
4+ bufferSize
5+ , allocateBuffer
6+ , freeBuffer
7+ , newBufferPool
8+ , withBufferPool
9+ , toBlazeBuffer
10+ , copy
11+ , toBS
12+ ) where
413
514import Control.Monad (when)
615import qualified Data.ByteString as BS
@@ -14,6 +23,25 @@ import Foreign.Marshal.Alloc (mallocBytes, free, finalizerFree)
1423import Foreign.Ptr (Ptr, castPtr, plusPtr)
1524import Network.Wai.Handler.Warp.Types
1625
26+----------------------------------------------------------------
27+
28+-- | The default size of the write buffer: 16384 (2^14 = 1024 * 16).
29+-- This is the maximum size of TLS record.
30+-- This is also the maximum size of HTTP/2 frame payload
31+-- (excluding frame header).
32+bufferSize :: BufSize
33+bufferSize = 16384
34+
35+-- | Allocating a buffer with malloc().
36+allocateBuffer :: Int -> IO Buffer
37+allocateBuffer = mallocBytes
38+
39+-- | Releasing a buffer with free().
40+freeBuffer :: Buffer -> IO ()
41+freeBuffer = free
42+
43+----------------------------------------------------------------
44+
1745largeBufferSize :: Int
1846largeBufferSize = 16384
1947
@@ -30,11 +58,13 @@ mallocBuffer size = do
3058 return $! PS fptr 0 size
3159{-# INLINE mallocBuffer #-}
3260
61+{-
3362createBuffer :: Int -> IO ByteString
3463createBuffer size = do
3564 fptr <- mallocByteString size
3665 return $! PS fptr 0 size
3766{-# INLINE createBuffer #-}
67+-}
3868
3969usefulBuffer :: ByteString -> Bool
4070usefulBuffer buffer = BS.length buffer >= minBufferSize
@@ -62,17 +92,10 @@ withBufferPool pool f = do
6292 return $! unsafeTake consumed buffer
6393{-# INLINE withBufferPool #-}
6494
65−-- 2^14 = 1024 * 16
66−-- The maximum size of TLS record
67−-- The maximum size of HTTP/2 frame payload (excluding frame header)
68−bufferSize :: BufSize
69−bufferSize = 16384
70−
71−allocateBuffer :: Int -> IO Buffer
72−allocateBuffer = mallocBytes
73−
74−freeBuffer :: Buffer -> IO ()
75−freeBuffer = free
95+----------------------------------------------------------------
96+--
97+-- Utilities
98+--
7699
77100toBlazeBuffer :: Buffer -> BufSize -> IO B.Buffer
78101toBlazeBuffer ptr size = do