websockets 0.4.0.1 → 0.4.1.0
raw patch · 10 files changed
+30/−74 lines, 10 files
Files
- src/Network/WebSockets.hs +0/−2
- src/Network/WebSockets/Handshake.hs +1/−1
- src/Network/WebSockets/Protocol.hs +9/−8
- src/Network/WebSockets/Protocol/Hybi00.hs +6/−7
- src/Network/WebSockets/Protocol/Hybi00/Internal.hs +1/−1
- src/Network/WebSockets/Protocol/Hybi10.hs +6/−7
- src/Network/WebSockets/Protocol/Hybi10/Internal.hs +5/−3
- src/Network/WebSockets/Protocol/Hybi17.hs +0/−21
- src/Network/WebSockets/Protocol/Hybi17/Internal.hs +0/−20
- websockets.cabal +2/−4
src/Network/WebSockets.hs view
@@ -96,7 +96,6 @@ , I.BinaryProtocol , I.Hybi00 , I.Hybi10- , I.Hybi17 -- * A simple standalone server , I.runServer@@ -161,7 +160,6 @@ import qualified Network.WebSockets.Protocol as I import qualified Network.WebSockets.Protocol.Hybi00 as I import qualified Network.WebSockets.Protocol.Hybi10 as I-import qualified Network.WebSockets.Protocol.Hybi17 as I import qualified Network.WebSockets.Protocol.Unsafe as Unsafe import qualified Network.WebSockets.Socket as I import qualified Network.WebSockets.Types as I
src/Network/WebSockets/Handshake.hs view
@@ -47,4 +47,4 @@ _ -> [] where versionHeader = [("Sec-WebSocket-Version",- B.intercalate ", " $ map headerVersion (implementations :: [p]))]+ B.intercalate ", " $ concatMap headerVersions (implementations :: [p]))]
src/Network/WebSockets/Protocol.hs view
@@ -19,22 +19,23 @@ class Protocol p where -- | Unique identifier for us.- version :: p -> String+ version :: p -> String - -- | Version as used in the "Sec-WebSocket-Version " header. This is usually- -- not the same, or derivable from "version", e.g. for hybi10, it's "8".- headerVersion :: p -> B.ByteString+ -- | Version accepted in the "Sec-WebSocket-Version " header. This is+ -- usually not the same, or derivable from "version", e.g. for hybi10, it's+ -- "7", "8" or "17".+ headerVersions :: p -> [B.ByteString] - encodeFrame :: p -> Encoder p Frame- decodeFrame :: p -> Decoder p Frame+ encodeFrame :: p -> Encoder p Frame+ decodeFrame :: p -> Decoder p Frame -- | Parse and validate the rest of the request. For hybi10, this is just -- validation, but hybi00 also needs to fetch a "security token" -- -- Todo: Maybe we should introduce our own simplified error type here. (to -- be amended with the RequestHttpPart for the user)- finishRequest :: p -> RequestHttpPart- -> Decoder p (Either HandshakeError Request)+ finishRequest :: p -> RequestHttpPart+ -> Decoder p (Either HandshakeError Request) -- | Implementations of the specification implementations :: [p]
src/Network/WebSockets/Protocol/Hybi00.hs view
@@ -7,16 +7,15 @@ import Network.WebSockets.Protocol import Network.WebSockets.Protocol.Hybi00.Internal import Network.WebSockets.Protocol.Hybi10.Internal-import Network.WebSockets.Protocol.Hybi17.Internal data Hybi00 = forall p. Protocol p => Hybi00 p instance Protocol Hybi00 where- version (Hybi00 p) = version p- headerVersion (Hybi00 p) = headerVersion p- encodeFrame (Hybi00 p) = encodeFrame p- decodeFrame (Hybi00 p) = decodeFrame p- finishRequest (Hybi00 p) = finishRequest p- implementations = [Hybi00 Hybi17_, Hybi00 Hybi10_, Hybi00 Hybi00_]+ version (Hybi00 p) = version p+ headerVersions (Hybi00 p) = headerVersions p+ encodeFrame (Hybi00 p) = encodeFrame p+ decodeFrame (Hybi00 p) = decodeFrame p+ finishRequest (Hybi00 p) = finishRequest p+ implementations = [Hybi00 Hybi10_, Hybi00 Hybi00_] instance TextProtocol Hybi00
src/Network/WebSockets/Protocol/Hybi00/Internal.hs view
@@ -30,7 +30,7 @@ instance Protocol Hybi00_ where version Hybi00_ = "hybi00"- headerVersion Hybi00_ = "0" -- but the client will elide it+ headerVersions Hybi00_ = ["0"] -- but the client will elide it encodeFrame Hybi00_ = encodeFrameHybi00 decodeFrame Hybi00_ = decodeFrameHybi00 finishRequest Hybi00_ = runErrorT . handshakeHybi00
src/Network/WebSockets/Protocol/Hybi10.hs view
@@ -5,17 +5,16 @@ import Network.WebSockets.Protocol import Network.WebSockets.Protocol.Hybi10.Internal-import Network.WebSockets.Protocol.Hybi17.Internal data Hybi10 = forall p. Protocol p => Hybi10 p instance Protocol Hybi10 where- version (Hybi10 p) = version p- headerVersion (Hybi10 p) = headerVersion p- encodeFrame (Hybi10 p) = encodeFrame p- decodeFrame (Hybi10 p) = decodeFrame p- finishRequest (Hybi10 p) = finishRequest p- implementations = [Hybi10 Hybi17_, Hybi10 Hybi10_]+ version (Hybi10 p) = version p+ headerVersions (Hybi10 p) = headerVersions p+ encodeFrame (Hybi10 p) = encodeFrame p+ decodeFrame (Hybi10 p) = decodeFrame p+ finishRequest (Hybi10 p) = finishRequest p+ implementations = [Hybi10 Hybi10_] instance TextProtocol Hybi10 instance BinaryProtocol Hybi10
src/Network/WebSockets/Protocol/Hybi10/Internal.hs view
@@ -31,7 +31,7 @@ instance Protocol Hybi10_ where version Hybi10_ = "hybi10"- headerVersion Hybi10_ = "8"+ headerVersions Hybi10_ = ["13", "8", "7"] encodeFrame Hybi10_ = encodeFrameHybi10 decodeFrame Hybi10_ = decodeFrameHybi10 finishRequest Hybi10_ = handshakeHybi10@@ -115,8 +115,10 @@ handshakeHybi10 :: RequestHttpPart -> Decoder p (Either HandshakeError Request) handshakeHybi10 reqHttp@(RequestHttpPart path h) = return $ do case getHeader "Sec-WebSocket-Version" of- Right "8" -> return ()- _ -> throwError NotSupported+ Right "7" -> return ()+ Right "8" -> return ()+ Right "13" -> return ()+ _ -> throwError NotSupported key <- getHeader "Sec-WebSocket-Key" let hash = unlazy $ bytestringDigest $ sha1 $ lazy $ key `mappend` guid let encoded = B64.encode hash
− src/Network/WebSockets/Protocol/Hybi17.hs
@@ -1,21 +0,0 @@-{-# LANGUAGE ExistentialQuantification #-}-module Network.WebSockets.Protocol.Hybi17- ( Hybi17- ) where--import Network.WebSockets.Protocol-import Network.WebSockets.Protocol.Hybi10.Internal-import Network.WebSockets.Protocol.Hybi17.Internal--data Hybi17 = forall p. Protocol p => Hybi17 p--instance Protocol Hybi17 where- version (Hybi17 p) = version p- headerVersion (Hybi17 p) = headerVersion p- encodeFrame (Hybi17 p) = encodeFrame p- decodeFrame (Hybi17 p) = decodeFrame p- finishRequest (Hybi17 p) = finishRequest p- implementations = [Hybi17 Hybi17_, Hybi17 Hybi10_]--instance TextProtocol Hybi17-instance BinaryProtocol Hybi17
− src/Network/WebSockets/Protocol/Hybi17/Internal.hs
@@ -1,20 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-module Network.WebSockets.Protocol.Hybi17.Internal- ( Hybi17_ (..)- ) where--import Network.WebSockets.Protocol-import Network.WebSockets.Protocol.Hybi10.Internal--data Hybi17_ = Hybi17_--instance Protocol Hybi17_ where- version Hybi17_ = "hybi17"- headerVersion Hybi17_ = "13"- encodeFrame Hybi17_ = encodeFrame Hybi10_- decodeFrame Hybi17_ = decodeFrame Hybi10_- finishRequest Hybi17_ = finishRequest Hybi10_- implementations = [Hybi17_]--instance TextProtocol Hybi17_-instance BinaryProtocol Hybi17_
websockets.cabal view
@@ -1,5 +1,5 @@ Name: websockets-Version: 0.4.0.1+Version: 0.4.1.0 Synopsis: A sensible and clean way to write WebSocket-capable servers in Haskell.@@ -34,7 +34,7 @@ Stability: experimental Category: Network Build-type: Simple-Cabal-version: >= 1.6+Cabal-version: >= 1.8 Homepage: http://jaspervdj.be/websockets Bug-reports: https://github.com/jaspervdj/websockets/issues@@ -58,8 +58,6 @@ Network.WebSockets.Protocol.Hybi00.Internal Network.WebSockets.Protocol.Hybi10 Network.WebSockets.Protocol.Hybi10.Internal- Network.WebSockets.Protocol.Hybi17- Network.WebSockets.Protocol.Hybi17.Internal Network.WebSockets.Protocol.Unsafe Network.WebSockets.Socket Network.WebSockets.Types