-- | This main module provides APIs for QUIC clients. module Network.QUIC.Client ( -- * Running a QUIC client run, -- * Configration ClientConfig, defaultClientConfig, ccServerName, ccServerNameOverride, ccPortName, ccALPN, ccUse0RTT, ccResumption, ccCiphers, ccGroups, ccVersions, -- , ccCredentials ccValidate, ccSockConnected, ccWatchDog, -- * Resumption ResumptionInfo, getResumptionInfo, isResumptionPossible, is0RTTPossible, -- * Migration -- | If 'ccSockConnected' is 'True', a connected socket is made. -- Otherwise, a unconnected socket is made. -- -- For unconnected sockets, a preferred network IF is used -- according to packet routing. But since the current peer CID -- is used with the new local address, a bad guy can correlate -- the old local addresss and the new local address via the -- current peer CID. In other words, migration is trackable. -- -- For connected sockets, the old local address is kept to be -- used even if a preferred network IF gets available. Call the -- 'migrate' API to use the new local address. This ensures that -- a new peer CID is used for the new local address. In short, -- migration is not trackable. -- -- If 'ccWatchDog' is 'True' on Linux and macOS, a watch dog -- thread is spawned and it calls 'migrate' when network-related -- events (e.g. a new network IF is attached or the default -- route is changed) are observed. This is an experimental -- feature. migrate, ) where import Network.QUIC.Client.Run import Network.QUIC.Config import Network.QUIC.Connection import Network.QUIC.Types