úΙŒ“yD      !"#$%&'()*+,-./0123456789:;<=>?@ABCNone!"OT(Function to send raw data to the server.FFunction to block reading a datachunk of a given size from the server.-Initiates a RawHttp2Connection with a server.>The current code does not handle closing the connexion, yikes.Server's hostname.Server's port to connect to.TLS parameters. The D7 hook is overwritten to always return ["h2", "h2-17"].None!"OT qSends a frame to the server. The first argument is a FrameFlags modifier (e.g., to sed the end-of-stream flag).EStarts a new client stream.FReceives frames from a server.G0Function that will close the network connection. )Closes the Http2FrameConnection abruptly. Creates a client stream. Sends a frame to the server.1Sends multiple back-to-back frames to the server.)Waits for the next frame from the server.Creates a new  4 to a given host for a frame-to-frame communication.HIJ KEFG      HIJ KEFG None!"OT%L@A function able to split a header block into multiple fragments.MEHelper to carry around the HPACK encoder for outgoing header blocks..6Handler upon receiving a PUSH_PROMISE from the server.The functions for = are similar to those used in ''. But callers shall not use @ to initialize the PUSH_PROMISE stream. Rather, callers should N or  to reject the PUSH_PROMISE.œThe StreamId corresponds to the parent stream as PUSH_PROMISEs are tied to a client-initiated stream. Longer term we may move passing this handler to the ! instead of 7 (as it is for now).FRecord holding functions one can call while in an HTTP2 client stream.=Starts the stream with HTTP headers. Flags modifier can use Om if no data is required passed the last block of headers. Usually, this is the only call needed to build an +.$Changes the PRIORITY of this stream.SResets this stream with a RST frame. You should not use this stream past this call.êWaits for HTTP headers from the server. This function also passes the last frame header of the PUSH-PROMISE, HEADERS, or CONTINUATION sequence of frames. Waiting more than once per stream will hang as headers are sent only one time.Waits for a DATA frame chunk. A user should testEndStream on the frame header to know when the server is done with the stream.ÎSends a DATA frame chunk. You can use send empty frames with only headers modifiers to close streams. This function is oblivious to framing and hence does not respect the RFC if sending large blocks. Use 8‰ to chunk and send naively according to server's preferences. This function can be useful if you intend to handle the framing yourself.2Opaque proof that a client stream was initialized.*This type is only useful to force calling  in + and contains no information.P,Couples client and server settings together.GRecord holding functions one can call while in an HTTP2 client session.ýSend a PING, the payload size must be exactly eight bytes. Returns an IO to wait for a ping reply. No timeout is provided. Only the first call to this IO will return if a reply is received. Hence we recommend wrapping this IO in an Async (e.g., with race (threadDelay timeout).)ØSends a SETTINGS. Returns an IO to wait for a settings reply. No timeout is provided. Only the first call to this IO will return if a reply is received. Hence we recommend wrapping this IO in an Async (e.g., with race (threadDelay timeout).) Sends a GOAWAY. !Spawns new streams. See (."Simple getter for the 1" for the whole client connection.#Simple getter for the -" for the whole client connection.$&Returns a function to split a payload.%ÿ4Whether or not the client library believes the server will reject the new stream. The Int content corresponds to the number of streams that should end before accepting more streams. A reason this number can be more than zero is that servers can change (and hence reduce) the advertised number of allowed Q at any time.(=Type alias for callback-based functions starting new streams.*The callback a user must provide takes an  and returns a )-. This construction may seem wrong because a )ÿ= contains an initialization and a handler functions. The explanation for this twistedness is as follows: in HTTP2 stream-ids must be monotonically increasing, if we want to support multi-threaded clients we need to serialize access to a critical region of the code when clients send HEADERS+CONTINUATIONs frames. Passing the j object as part of the callback avoids leaking the implementation of the critical region, meanwhile, the ) delimits this critical region.)Defines a client stream.7Please red the doc for this record fields and then see (.+íFunction to initialize a new client stream. This function runs in a exclusive-access section of the code and may prevent other threads to initialize new streams. Hence, you should ensure this IO does not wait for long periods of time.,ŸFunction to operate with the stream. IncomingFlowControl currently is credited on your behalf as soon as a DATA frame arrives (and before you handle it with .). However we do not send WINDOW_UPDATE with 5M. This design may change in the future to give more leeway to library users.-,Receives credit-based flow-control or block.ñThere is no way to observe the total amount of credit and receive/withdraw are atomic hence this object is thread-safe. However we plan to propose an STM-based API to allow withdrawing atomically from both the connection and a per-stream -× objects at a same time. Without such atomicity one must ensure consumers do not exhaust the connection credit before taking the per-stream credit (else they might prevent others sending data without taking any).ÄLonger term we plan to hide outgoing-flow-control increment/decrement altogether because exception between withdrawing credit and sending DATA could mean lost credit (and hence hanging streams)./9Add credit (using a hidden mutable reference underneath).0øWait until we can take credit from stash. The returned value correspond to the amount that could be withdrawn, which is min(current, wanted). A caller should withdraw credit to send DATA chunks and put back any unused credit with _receiveCredit.1!Offers credit-based flow-control.TAny mutable changes are atomic and hence work as intended in a multithreaded setup.½The design of the flow-control mechanism is subject to changes. One important thing to keep in mind with current implementation is that both the connection and streams are credited with 3Ž as soon as DATA frames arrive, hence no-need to account for the DATA frames (but you can account for delay-bandwidth product for instance).3…Add credit (using a hidden mutable reference underneath). This function only does accounting, the IO only does mutable changes. See 5.41Consumes some credit and returns the credit left.5ÿSends a WINDOW_UPDATE frame crediting it with the whole amount credited since the last _updateWindow call. The boolean tells whether an update was actually sent or not. A reason for not sending an update is if there is no credit in the flow-control system.6 Synonym of  . ,https://github.com/http2/http2-spec/pull/3667ˆStarts a new Http2Client with a remote Host/Port. TLS ClientParams are mandatory because we only support TLS-protected streams for now.R½We currently need a specific loop for crediting streams because a client user may programmatically reset and stop listening for a stream and stop calling waitData (which credits streams).TODO: modify the X function to wait and credit all the remaining data that could have been sent in flightSDSplit headers like so that no payload exceeds server's maxFrameSize.T,Breaks a ByteString into fixed-sized chunks. . fixedSizeChunks 2 "hello" = ["he", "ll", "o"]NLMUVWXPYZ[ !"#$%&'()*+,-./012345\67Host to connect to.3Port number to connect to (usually 443 on the web).-The buffersize for the Network.HPACK encoder.-The buffersize for the Network.HPACK decoder.=The TLS client parameters (e.g., to allow some certificates)..Initial SETTINGS that are sent as first frame.]^_R`abcST8defghijklmnopqrNs6tuv  !"#$%&'()*+,-./012345678( !"#$7)*+,(%&'812345-./06+LMUVWXPYZ[ !"#$%&'()*+,-./012345\67]^_R`abcST8defghijklmnopqrNsNone:IAn HTTP2 response, once fully received, is made of headers and a payload.;TResult containing the unpacked headers and all frames received in on a stream. See : and A to get a higher-level utility.< Result for a ?.=1Opaque type to express an action which timed out.? Performs a ?@ and waits for a reply up to a given timeout (in microseconds).@#Wait for a stream until completion.EThis function is fine if you don't want to consume results in chunks.ArConverts a StreamResult to a StramResponse, stopping at the first error using the `Either HTTP2.ErrorCode` monad.B8Sequentially wait for every push-promise with a handler.7This function runs forever and you should wrap it with  withAsync. :;<=>?client connectiontimeout in microseconds.8-bytes message to uniquely identify the reply@AB :;<=>?@AB =><?;:@AB:;<=>?@ABw       !"#$%&&'())*+,,-.//0123456789::;<=>?@ABCDEFFG HIJKLMNKLOPQRISTUNVWXYZ[\]^_`abcdefghijklmnopqrpst@Auv+http2-client-0.2.0.0-GvaejM4ob3uIUJflIVBF0t"Network.HTTP2.Client.RawConnection$Network.HTTP2.Client.FrameConnectionNetwork.HTTP2.ClientNetwork.HTTP2.Client.HelpersRawHttp2Connection_sendRaw_nextRaw_closenewRawHttp2ConnectionHttp2FrameClientStream _sendFrames _getStreamIdHttp2FrameConnectioncloseConnectionmakeFrameClientStreamsendOnesendBackToBacknextnewHttp2FrameConnectionPushPromiseHandler Http2Stream_headers_prio_rst _waitHeaders _waitData_sendDataChunk_waitPushPromise StreamThread Http2Client_ping _settings_goaway _startStream_incomingFlowControl_outgoingFlowControl_paylodSplitterTooMuchConcurrency_getStreamRoomNeeded StreamStarterStreamDefinition _initStream _handleStreamOutgoingFlowControl_receiveCredit_withdrawCreditIncomingFlowControl _addCredit_consumeCredit _updateWindow_gtfonewHttp2ClientsendData$fShowTooMuchConcurrencyStreamResponse StreamResult PingReplyTimedOutping waitStreamfromStreamResult onPushPromise$fShowTimedOut tls-1.4.0-3rXjkMhi9yq7d9BX81grwWNetwork.TLS.Parameters onSuggestALPN_makeFrameClientStream _serverStream_closeConnectionHttp2ServerStream_nextHeaderAndFramePayloadSplitterHpackEncoderContext waitHeaders"http2-1.6.3-7Ze900qxsdZ4ZsLE9Kkc1wNetwork.HTTP2.Types setEndStreamConnectionSettingsmaxConcurrentStreamscreditDataFramesLoopsettingsPayloadSplitterfixedSizeChunks_encodeHeaders_applySettingsCST_clientSettings_serverSettingsdefaultConnectionSettingsinitializeStreamincomingFramesLoopincomingControlFramesLoopincomingHPACKFramesLoopnewIncomingFlowControlnewOutgoingFlowControl sendHeaders sendDataFramesendResetFrame sendGTFOFramerfcError sendPingFramesendWindowUpdateFramesendSettingsFramesendPriorityFramewaitFrameWithStreamIdwaitFrameWithTypeIdwaitFrameWithTypeIdForStreamId waitFrame isPingReplyisSettingsReplywaitHeadersWithStreamId!waitPushPromiseWithParentStreamId&network-2.6.3.2-IsLM4TXcLoRI0fmmBYVyQzNetwork.SocketHostNameNetwork.Socket.Types PortNumber ClientParams