websockets 0.6.0.1 → 0.6.0.2
raw patch · 8 files changed
+16/−38 lines, 8 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- src/Network/WebSockets/Monad.hs +1/−3
- src/Network/WebSockets/Protocol.hs +1/−3
- src/Network/WebSockets/Protocol/Hybi00.hs +1/−1
- src/Network/WebSockets/Protocol/Hybi00/Internal.hs +1/−1
- src/Network/WebSockets/Protocol/Hybi10.hs +1/−1
- src/Network/WebSockets/Protocol/Hybi10/Internal.hs +9/−15
- src/Network/WebSockets/Protocol/Hybi10/Mask.hs +1/−13
- websockets.cabal +1/−1
src/Network/WebSockets/Monad.hs view
@@ -32,7 +32,6 @@ import Control.Monad.Reader (ReaderT, ask, runReaderT) import Control.Monad.Trans (MonadIO, lift, liftIO) import Data.Foldable (forM_)-import System.Random (newStdGen) import Blaze.ByteString.Builder (Builder) import Data.ByteString (ByteString)@@ -141,8 +140,7 @@ -> Iteratee ByteString IO a runWebSocketsWith' opts proto ws outIter = do -- Create sink with a random source- gen <- liftIO newStdGen- let sinkIter = encodeMessages proto gen =$ builderToByteString =$ outIter+ let sinkIter = encodeMessages proto =$ builderToByteString =$ outIter sink <- Sink <$> liftIO (newMVar sinkIter) let sender = makeBuilderSender outIter
src/Network/WebSockets/Protocol.hs view
@@ -12,7 +12,6 @@ ) where import Blaze.ByteString.Builder (Builder)-import System.Random (RandomGen) import qualified Data.ByteString as B import qualified Data.Enumerator as E @@ -39,9 +38,8 @@ -- | Encodes messages to binary 'Builder's. Takes a random source so it is -- able to do masking of frames (needed in some cases).- encodeMessages :: (Monad m, RandomGen g)+ encodeMessages :: Monad m => p- -> g -> E.Enumeratee (Message p) Builder m a -- | Decodes messages from binary 'B.ByteString's.
src/Network/WebSockets/Protocol/Hybi00.hs view
@@ -17,7 +17,7 @@ version (Hybi00 p) = version p headerVersions (Hybi00 p) = headerVersions p supported (Hybi00 p) h = supported p h- encodeMessages (Hybi00 p) g = (EL.map castMessage =$) . encodeMessages p g+ encodeMessages (Hybi00 p) = (EL.map castMessage =$) . encodeMessages p decodeMessages (Hybi00 p) = (decodeMessages p =$) . EL.map castMessage finishRequest (Hybi00 p) = finishRequest p implementations = [Hybi00 Hybi10_, Hybi00 Hybi00_]
src/Network/WebSockets/Protocol/Hybi00/Internal.hs view
@@ -30,7 +30,7 @@ version Hybi00_ = "hybi00" headerVersions Hybi00_ = [] -- The client will elide it supported Hybi00_ h = getSecWebSocketVersion h == Nothing- encodeMessages Hybi00_ _ = EL.map encodeMessage+ encodeMessages Hybi00_ = EL.map encodeMessage decodeMessages Hybi00_ = E.sequence (A.iterParser parseMessage) finishRequest Hybi00_ = handshakeHybi00 implementations = [Hybi00_]
src/Network/WebSockets/Protocol/Hybi10.hs view
@@ -15,7 +15,7 @@ version (Hybi10 p) = version p headerVersions (Hybi10 p) = headerVersions p supported (Hybi10 p) h = supported p h- encodeMessages (Hybi10 p) g = (EL.map castMessage =$) . encodeMessages p g+ encodeMessages (Hybi10 p) = (EL.map castMessage =$) . encodeMessages p decodeMessages (Hybi10 p) = (decodeMessages p =$) . EL.map castMessage finishRequest (Hybi10 p) = finishRequest p implementations = [Hybi10 Hybi10_]
src/Network/WebSockets/Protocol/Hybi10/Internal.hs view
@@ -8,7 +8,6 @@ import Data.Bits ((.&.), (.|.)) import Data.Maybe (maybeToList) import Data.Monoid (mempty, mappend, mconcat)-import System.Random (RandomGen) import Data.Attoparsec (anyWord8) import Data.Binary.Get (runGet, getWord16be, getWord64be)@@ -38,7 +37,7 @@ instance Protocol Hybi10_ where version Hybi10_ = "hybi10" headerVersions Hybi10_ = ["13", "8", "7"]- encodeMessages Hybi10_ = EL.mapAccum encodeMessageHybi10+ encodeMessages Hybi10_ = EL.map encodeMessageHybi10 decodeMessages Hybi10_ = decodeMessagesHybi10 finishRequest Hybi10_ = handshakeHybi10 implementations = [Hybi10_]@@ -46,11 +45,10 @@ instance TextProtocol Hybi10_ instance BinaryProtocol Hybi10_ -encodeMessageHybi10 :: RandomGen g => g -> Message p -> (g, B.Builder)-encodeMessageHybi10 gen msg = (gen', builder)+encodeMessageHybi10 :: Message p -> B.Builder+encodeMessageHybi10 msg = builder where- (mask, gen') = randomMask gen- builder = encodeFrameHybi10 mask $ case msg of+ builder = encodeFrameHybi10 $ case msg of (ControlMessage (Close pl)) -> Frame True CloseFrame pl (ControlMessage (Ping pl)) -> Frame True PingFrame pl (ControlMessage (Pong pl)) -> Frame True PongFrame pl@@ -58,10 +56,10 @@ (DataMessage (Binary pl)) -> Frame True BinaryFrame pl -- | Encode a frame-encodeFrameHybi10 :: Mask -> Frame -> B.Builder-encodeFrameHybi10 mask f = B.fromWord8 byte0 `mappend`- B.fromWord8 byte1 `mappend` len `mappend` maskbytes `mappend`- B.fromLazyByteString (maskPayload mask (framePayload f))+encodeFrameHybi10 :: Frame -> B.Builder+encodeFrameHybi10 f = B.fromWord8 byte0 `mappend`+ B.fromWord8 byte1 `mappend` len `mappend`+ B.fromLazyByteString (framePayload f) where byte0 = fin .|. opcode fin = if frameFin f then 0x80 else 0x00@@ -73,11 +71,7 @@ PingFrame -> 0x09 PongFrame -> 0x0a - (maskflag, maskbytes) = case mask of- Nothing -> (0x00, mempty)- Just m -> (0x80, B.fromByteString m)-- byte1 = maskflag .|. lenflag+ byte1 = lenflag len' = BL.length (framePayload f) (lenflag, len) | len' < 126 = (fromIntegral len', mempty)
src/Network/WebSockets/Protocol/Hybi10/Mask.hs view
@@ -3,11 +3,9 @@ module Network.WebSockets.Protocol.Hybi10.Mask ( Mask , maskPayload- , randomMask ) where -import Data.Bits (shiftR, xor)-import System.Random (RandomGen, random)+import Data.Bits (xor) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL@@ -24,13 +22,3 @@ f !i !c = let i' = (i + 1) `mod` len m = mask `B.index` i in (i', m `xor` c)---- | Create a random mask-randomMask :: forall g. RandomGen g => g -> (Mask, g)-randomMask gen = (Just (B.pack [b1, b2, b3, b4]), gen')- where- (!int, !gen') = random gen :: (Int, g)- !b1 = fromIntegral $ int `mod` 0x100- !b2 = fromIntegral $ int `shiftR` 8 `mod` 0x100- !b3 = fromIntegral $ int `shiftR` 16 `mod` 0x100- !b4 = fromIntegral $ int `shiftR` 24 `mod` 0x100
websockets.cabal view
@@ -1,5 +1,5 @@ Name: websockets-Version: 0.6.0.1+Version: 0.6.0.2 Synopsis: A sensible and clean way to write WebSocket-capable servers in Haskell.