| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Network.QUIC.Simple
Synopsis
- runServer :: [(IP, PortNumber)] -> (Connection -> Stream -> IO ()) -> IO ()
- runClient :: HostName -> ServiceName -> (Connection -> Stream -> IO ()) -> IO ()
- runServerSimple :: (Serialise q, Serialise r) => IP -> PortNumber -> (q -> IO r) -> IO ()
- startClientSimple :: (Serialise q, Serialise r) => HostName -> ServiceName -> IO (IO (), q -> IO r)
- runServerStateful :: (Serialise q, Serialise r) => IP -> PortNumber -> (Connection -> TBQueue r -> IO s) -> (Connection -> s -> IO ()) -> (s -> q -> IO (s, Maybe r)) -> IO ()
- startClientAsync :: (Serialise q, Serialise r) => HostName -> ServiceName -> IO (Async (), Connection, MessageQueues q r)
- class Serialise a
- module Network.QUIC
Documentation
Check out the tests in the package git for a cookbook.
If you're unsure, start with the simplest wrapper. If the wrapper's limitations bother you, replace it with the source code and customize it to suit your needs. Alternatively, switch to a lower-level implementation to gain more features.
Don't let wrappers dictate your code structure and protocols — they're just there to get you a QUIC-start!
Basic wrappers
runServer :: [(IP, PortNumber)] -> (Connection -> Stream -> IO ()) -> IO () Source #
Start a server on all of the address-port pairs.
The server will have an autogenerated set of credentials on each start, just to get the TLS running. You can use "Network.QUIC.Simple.Credentials.genCredentials" to generate and keep them, so the clients can pin them after first connection.
The server will automatically accept the incoming stream before passing it to a (stateless) connection handler.
runClient :: HostName -> ServiceName -> (Connection -> Stream -> IO ()) -> IO () Source #
Run a client connecting to the provided host/port and auto-request a stream.
Server validation is disabled. If you want server authentication, you'd have to do that in your protocol handshake.
With the quic library >0.2.10 the connection migration will be enabled by default.
CBOR/Serialise wrappers
runServerSimple :: (Serialise q, Serialise r) => IP -> PortNumber -> (q -> IO r) -> IO () Source #
Start a server on the provided host and port and run a stateless CBOR-encoded request-response protocol.
While it is possible to use myThreadId to get some connection identifier and attach connection data on it,
you'd better use runServerStateful instead.
startClientSimple :: (Serialise q, Serialise r) => HostName -> ServiceName -> IO (IO (), q -> IO r) Source #
Start a client wrapper that will wait for a connection.
When connected, it will provide a way to stop it, and to do a simple blocking call.
There is no call tracking, so the client is not thread-safe.
Which is fine, when used with the runServerSimple.
Use startClientAsync to expose more functionality.
More flexible variants
runServerStateful :: (Serialise q, Serialise r) => IP -> PortNumber -> (Connection -> TBQueue r -> IO s) -> (Connection -> s -> IO ()) -> (s -> q -> IO (s, Maybe r)) -> IO () Source #
Start a server on the provided host and port and run a stateless CBOR-encoded request-response protocol.
The connection handler is stateful, with the initial state provided by a setup function. The handler function must provide next connection state, but may opt out of replying. Throw an exception to terminate the curent connection - the teardown function then can do the clean up.
startClientAsync :: (Serialise q, Serialise r) => HostName -> ServiceName -> IO (Async (), Connection, MessageQueues q r) Source #
Start a client wrapper that will wait for a connection.
Canceling the exposed worker thread will terminate connection. The exposed connection can be used to request more streams. The message queues are running CBOR codec to shuttle the data.
Types that are instances of the class allow values
to be quickly encoded or decoded directly to a CBOR representation,
for object transmission or storage.Serialise
Since: serialise-0.2.0.0
Instances
| Serialise All | Since: serialise-0.2.0.0 |
| Serialise Any | Since: serialise-0.2.0.0 |
| Serialise SomeTypeRep | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: SomeTypeRep -> Encoding # decode :: Decoder s SomeTypeRep # encodeList :: [SomeTypeRep] -> Encoding # decodeList :: Decoder s [SomeTypeRep] # | |
| Serialise Version | Since: serialise-0.2.0.0 |
| Serialise CChar | Since: serialise-0.2.0.0 |
| Serialise CClock | Since: serialise-0.2.0.0 |
| Serialise CDouble | Since: serialise-0.2.0.0 |
| Serialise CFloat | Since: serialise-0.2.0.0 |
| Serialise CInt | Since: serialise-0.2.0.0 |
| Serialise CIntMax | Since: serialise-0.2.0.0 |
| Serialise CIntPtr | Since: serialise-0.2.0.0 |
| Serialise CLLong | Since: serialise-0.2.0.0 |
| Serialise CLong | Since: serialise-0.2.0.0 |
| Serialise CPtrdiff | Since: serialise-0.2.0.0 |
| Serialise CSChar | Since: serialise-0.2.0.0 |
| Serialise CSUSeconds | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: CSUSeconds -> Encoding # decode :: Decoder s CSUSeconds # encodeList :: [CSUSeconds] -> Encoding # decodeList :: Decoder s [CSUSeconds] # | |
| Serialise CShort | Since: serialise-0.2.0.0 |
| Serialise CSigAtomic | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: CSigAtomic -> Encoding # decode :: Decoder s CSigAtomic # encodeList :: [CSigAtomic] -> Encoding # decodeList :: Decoder s [CSigAtomic] # | |
| Serialise CSize | Since: serialise-0.2.0.0 |
| Serialise CTime | Since: serialise-0.2.0.0 |
| Serialise CUChar | Since: serialise-0.2.0.0 |
| Serialise CUInt | Since: serialise-0.2.0.0 |
| Serialise CUIntMax | Since: serialise-0.2.0.0 |
| Serialise CUIntPtr | Since: serialise-0.2.0.0 |
| Serialise CULLong | Since: serialise-0.2.0.0 |
| Serialise CULong | Since: serialise-0.2.0.0 |
| Serialise CUSeconds | Since: serialise-0.2.0.0 |
| Serialise CUShort | Since: serialise-0.2.0.0 |
| Serialise CWchar | Since: serialise-0.2.0.0 |
| Serialise Void | Since: serialise-0.2.4.0 |
| Serialise Fingerprint | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: Fingerprint -> Encoding # decode :: Decoder s Fingerprint # encodeList :: [Fingerprint] -> Encoding # decodeList :: Decoder s [Fingerprint] # | |
| Serialise ExitCode | Since: serialise-0.2.0.0 |
| Serialise Int16 | Since: serialise-0.2.0.0 |
| Serialise Int32 | Since: serialise-0.2.0.0 |
| Serialise Int64 | Since: serialise-0.2.0.0 |
| Serialise Int8 | Since: serialise-0.2.0.0 |
| Serialise Word16 | Since: serialise-0.2.0.0 |
| Serialise Word32 | Since: serialise-0.2.0.0 |
| Serialise Word64 | Since: serialise-0.2.0.0 |
| Serialise Word8 | Since: serialise-0.2.0.0 |
| Serialise ByteString | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: ByteString -> Encoding # decode :: Decoder s ByteString # encodeList :: [ByteString] -> Encoding # decodeList :: Decoder s [ByteString] # | |
| Serialise ByteString | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: ByteString -> Encoding # decode :: Decoder s ByteString # encodeList :: [ByteString] -> Encoding # decodeList :: Decoder s [ByteString] # | |
| Serialise ShortByteString | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: ShortByteString -> Encoding # decode :: Decoder s ShortByteString # encodeList :: [ShortByteString] -> Encoding # decodeList :: Decoder s [ShortByteString] # | |
| Serialise Term | Since: serialise-0.2.0.0 |
| Serialise IntSet | Since: serialise-0.2.0.0 |
| Serialise KindRep | Since: serialise-0.2.0.0 |
| Serialise Ordering | Since: serialise-0.2.0.0 |
| Serialise TyCon | Since: serialise-0.2.0.0 |
| Serialise TypeLitSort | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: TypeLitSort -> Encoding # decode :: Decoder s TypeLitSort # encodeList :: [TypeLitSort] -> Encoding # decodeList :: Decoder s [TypeLitSort] # | |
| Serialise Half | Since: serialise-0.2.0.0 |
| Serialise CryptoToken | |
Defined in Network.QUIC.Packet.Token Methods encode :: CryptoToken -> Encoding # decode :: Decoder s CryptoToken # encodeList :: [CryptoToken] -> Encoding # decodeList :: Decoder s [CryptoToken] # | |
| Serialise Version | |
| Serialise ResumptionInfo | |
Defined in Network.QUIC.Types.Resumption Methods encode :: ResumptionInfo -> Encoding # decode :: Decoder s ResumptionInfo # encodeList :: [ResumptionInfo] -> Encoding # decodeList :: Decoder s [ResumptionInfo] # | |
| Serialise Text | Since: serialise-0.2.0.0 |
| Serialise Text | Since: serialise-0.2.0.0 |
| Serialise UTCTime |
Since: serialise-0.2.0.0 |
| Serialise Group | |
| Serialise Integer | Since: serialise-0.2.0.0 |
| Serialise Natural | Since: serialise-0.2.0.0 |
| Serialise () | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| Serialise Bool | Since: serialise-0.2.0.0 |
| Serialise Char | Since: serialise-0.2.0.0 |
| Serialise Double | Since: serialise-0.2.0.0 |
| Serialise Float | Since: serialise-0.2.0.0 |
| Serialise Int | Since: serialise-0.2.0.0 |
| Serialise Levity | Since: serialise-0.2.6.0 |
| Serialise RuntimeRep | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class Methods encode :: RuntimeRep -> Encoding # decode :: Decoder s RuntimeRep # encodeList :: [RuntimeRep] -> Encoding # decodeList :: Decoder s [RuntimeRep] # | |
| Serialise VecCount | Since: serialise-0.2.0.0 |
| Serialise VecElem | Since: serialise-0.2.0.0 |
| Serialise Word | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (ZipList a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Complex a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Identity a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (First a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Last a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Down a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (First a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Last a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Max a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Min a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (WrappedMonoid a) | |
Defined in Codec.Serialise.Class Methods encode :: WrappedMonoid a -> Encoding # decode :: Decoder s (WrappedMonoid a) # encodeList :: [WrappedMonoid a] -> Encoding # decodeList :: Decoder s [WrappedMonoid a] # | |
| Serialise a => Serialise (Dual a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Product a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Sum a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (NonEmpty a) | Since: serialise-0.2.0.0 |
| (Serialise a, Integral a) => Serialise (Ratio a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (IntMap a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Seq a) | Since: serialise-0.2.0.0 |
| (Ord a, Serialise a) => Serialise (Set a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Tree a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Maybe a) | Since: serialise-0.2.4.0 |
| (Serialise a, Hashable a, Eq a) => Serialise (HashSet a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise (Vector a) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Prim a) => Serialise (Vector a) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Storable a) => Serialise (Vector a) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Unbox a) => Serialise (Vector a) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| Serialise a => Serialise (Maybe a) | Since: serialise-0.2.0.0 |
| Serialise a => Serialise [a] | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b) => Serialise (Either a b) | Since: serialise-0.2.0.0 |
| Serialise (Fixed e) | Values are serialised in units of least precision represented as
Since: serialise-0.2.0.0 |
| Serialise (Proxy a) | Since: serialise-0.2.0.0 |
| Typeable a => Serialise (TypeRep a) | Since: serialise-0.2.0.0 |
| (Ord k, Serialise k, Serialise v) => Serialise (Map k v) | Since: serialise-0.2.0.0 |
| (Serialise a, Serialise b) => Serialise (Either a b) | Since: serialise-0.2.4.0 |
| (Serialise a, Serialise b) => Serialise (These a b) | Since: serialise-0.2.4.0 |
| (Serialise a, Serialise b) => Serialise (Pair a b) | Since: serialise-0.2.4.0 |
| (Serialise a, Serialise b) => Serialise (These a b) | Since: serialise-0.2.4.0 |
| (Serialise k, Hashable k, Eq k, Serialise v) => Serialise (HashMap k v) | Since: serialise-0.2.0.0 |
| (Serialise a, Serialise b) => Serialise (a, b) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| Serialise a => Serialise (Const a b) | Since: serialise-0.2.0.0 |
| Serialise (f a) => Serialise (Alt f a) | Since: serialise-0.2.0.0 |
| (Serialise a, Serialise b, Serialise c) => Serialise (a, b, c) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d) => Serialise (a, b, c, d) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d, Serialise e) => Serialise (a, b, c, d, e) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d, Serialise e, Serialise f) => Serialise (a, b, c, d, e, f) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d, Serialise e, Serialise f, Serialise g) => Serialise (a, b, c, d, e, f, g) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d, Serialise e, Serialise f, Serialise g, Serialise h) => Serialise (a, b, c, d, e, f, g, h) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
| (Serialise a, Serialise b, Serialise c, Serialise d, Serialise e, Serialise f, Serialise g, Serialise h, Serialise i) => Serialise (a, b, c, d, e, f, g, h, i) | Since: serialise-0.2.0.0 |
Defined in Codec.Serialise.Class | |
The rest of the QUIC API
module Network.QUIC