śĪpĒeŗ      NoneB  !    !None"#$%How to know if we can split somewhereInput left-oversGenerator action+Packet and leftovers, if we could get them %"#$%"#$%None2468M&Sequence of steps to get a StreamWorker. This class is independent of things like the finer details concerning the frames and the streams.]Todo: although this shows a common pattern, I'm not sure how having a class here helps....'iA StreamWorker: a conduit that takes input tokens and answers with output tokens. It can perform I/O.&()*'+,-./0123456789:;<=>&()*'+,-./0123456789:;<= &()*'+10/.-,23476589:;<=> Safe-Inferred+:M{A concrete case of the above exception. Throw one of this if you don't want to implement your own type. Capture one  otherwise. )Throw exceptions derived from this (e.g, ? below) to have the HTTP/2 session to terminate gracefully. ’A function which takes three arguments: the first one says how to send data (on a socket or similar transport), and the second one how to receive data on said socket. The third argument encapsulates the sequence of steps needed for a clean shutdown. ķYou can implement one of these to let somebody else supply the push, pull and close callbacks. In this library we supply callbacks for TLS sockets, so that you don't need to go through the drudgery of managing those yourself.’Callback that the Session calls to realease resources associated with the channels. Take into account that your callback should be able to deal with non-clean shutdowns also, for example, if the connection to the remote peer is severed suddenly.uCallback type to pull data from a channel. The same as to PushAction applies to exceptions thrown from there. ÉCallback type to push data to a channel. Part of this interface is the abstract exception type IOProblem. Throw an instance of it to notify the session that the connection has been broken. ?@ABC?@ ?@ABCNone+,Singleton type. Used in conjunction with an D'. If the MVar is full, the fuction  I knows that it should finish at its earliest convenience and call the  for any open sessions.Exception inheriting from . This is thrown by the OpenSSL subsystem to signal that the connection was broken or that otherwise there was a problem at the SSL layer. Simple function to open Interruptible version of  @. Use the extra argument to notify the server of finishing. EFGHIJKLM NOPQRSTUVWXY ŅPath to a certificate the server is going to use to identify itself. Bear in mind that multiple domains can be served from the same HTTP/2 TLS socket, so please create the HTTP/2 certificate accordingly.%Path to the key of your certificate. AName of the network interface where you want to start your server-List of protocol names and the corresponding e to use for each. This way you can serve both HTTP/1.1 over TLS and HTTP/2 in the same socket.(Port to open to listen for connections.  Same as for    Same as for   Same as for   Same as for  Finish requestZ[\ EFGHIJMLK NOPQRSTUVWXY Z[\ None+2468M “A pushed stream, represented by a list of request headers, a list of response headers, and the usual response body (which may include final footers (not implemented yet)). A list of pushed streams ]'This exception will be raised inside a ’ when the underlying stream is cancelled (STREAM_RESET in HTTP/2). Do any necessary cleanup in a handler, or simply use the fact that the exception is asynchronously delivered to your CoherentWorker Haskell thread, giving you an opportunity to interrupt any blocked operations.’HMain type of this library. You implement one of these for your server. Basically this is a callback that the library calls as soon as it has all the headers of a request. For GET requests that's the entire request basically, but for POST and PUT requests this is just before the data starts arriving to the server. ĖA source-like conduit with the data returned in the response. The return value of the conduit is a list of footers. For now that list can be anything (even bottom), I'm not handling it just yet. +You use this type to answer a request. The V are thus response headers and they should contain the :status pseudo-header. The  N is a list of pushed streams...(I don't thaink that I'm handling those yet)Finalization headers ·Finalization headers. If you don't know what they are, chances are that you don't need to worry about them for now. The support in this library for those are at best sketchy.  A request is a set of headers and a request body.... which will normally be empty, except for POST and PUT requests. But this library enforces none of that. ˜This is a Source conduit (see Haskell Data.Conduit library from Michael Snoyman) that you can use to retrieve the data sent by the client piece-wise. ’tList of headers. The first part of each tuple is the header name (be sure to conform to the HTTP/2 convention of using lowercase) and the second part is the headers contents. This list needs to include the special :method, :scheme, :authority and :path pseudo-headers for requests; and :status (with a plain numeric value represented in ascii digits) for responses.^"Gets a single header from the list ]_^` ]_^ ]_^` None3HMNabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­® lmpquwxyz€‚›7abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ „…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­® None*+24*ư±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲĒĶÆ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×Ų None+The type of this function is equivalent to: [ http2Attendant :: CoherentWorker -> PushAction -> PullAction -> CloseAction -> IO () Given a w, this function wraps it with flow control, multiplexing, and state maintenance needed to run an HTTP/2 session. NoneNone    VA library for implementing HTTP/2 servers supporting streaming requests and responses.$(c) Alcides Viamontes Esquivel, 2015BSDalcidesv@zunzun.se experimentalPOSIXNone    Ł            !""#$%&'()*+,-./0123456789:;<=>?@ABBCDEFG HIJKLMNOPQRSTUVWXYZ[\]^_`abcde f g f h i i j k l m n n o p q r r s t u v w x y z { | | } } ~  €  ‚ ƒ „ … † † ‡ ˆ ‰ Š ‹ Œ  Ž   ‘ ‘ ’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ” ¢ £ ¤ „ ¦ § Ø © Ŗ « ¬ ­ ® Æ ° ° ± ² ³ “ µ ¶ · ø ø ¹ ¹ ŗ » ¼ < y ½ ½ ¾ æ Ą Į Ā Ć Ä Å Ę Ē Č É Ź Ė Ģ Ķ Ī Ŗ « Ļ Š ŃŅsecond-transfer-0.1.0.0SecondTransfer.MainLoopSecondTransferSecondTransfer.Http2SecondTransfer.UtilsSecondTransfer.MainLoop.FramerSecondTransfer.MainLoop.Tokens$SecondTransfer.MainLoop.PushPullType#SecondTransfer.MainLoop.OpenSSL_TLS&SecondTransfer.MainLoop.CoherentWorkerSecondTransfer.Http2.SessionSecondTransfer.Http2.Framer"SecondTransfer.Http2.MakeAttendantGenericIOProblem IOProblem Attendant CloseAction PullAction PushAction FinishRequestTLSLayerGenericProblemtlsServeWithALPN"tlsServeWithALPNAndFinishOnRequest PushedStream PushedStreamsCoherentWorkerDataAndConclusionPrincipalStreamFootersFinalizationHeadersRequestInputDataStreamHeadershttp2AttendantWord24strToInt word24ToInt getWord24be putWord24be lowercaseTextunfoldChannelAndSource stripString domainFromUrl$fBinaryWord24LengthCallbackFramer readNextChunk readLengthStreamWorkerClass StreamWorker initService initSession initStreamStreamOutputAction Finish_SOASendAssociatedFinish_SOASendAssociatedData_SOA SendData_SOASendAssociatedHeaders_SOASendHeaders_SOAGlobalStreamId LocalStreamIdStreamInputToken Finish_StkData_Stk Headers_STkUnpackedNameValueListactionIsForAssociatedStreampackHeaderTuplesunpackHeaderTuples getHeader$fBinaryUnpackedNameValueList$fExceptionGenericIOProblem$fExceptionIOProblem$fShowIOProblembaseGHC.MVarMVar Protocols Wired_PtrConnection_PtrWired_t Connection_tInterruptibleEither InterruptedRight_ILeft_IcloseConnectiondisposeWiredSessiongetSelectedProtocolrecvDatasendDatawaitForConnectionmakeConnectionallOk badHappenedtimeoutReached useBufferSizeprotocolsToWiredefaultWaitTime smallWaitTime!$fExceptionTLSLayerGenericProblemStreamCancelledExceptiongetHeaderFromFlatList#$fExceptionStreamCancelledExceptionWorkerThreadEnvironment _streamId_headersOutput _dataOutput_streamsCancelled_WTE HeadersSent InputFrame OutputFrameuseChunkLengthSessionStartDataSessionOutputCommandCancelSession_SOCSessionInputCommandCancelSession_SIC WorkerMonadStream2HeaderBlockFragment HashTableCoherentSession SessionMaker SessionOutput SessionInputSession dataOutput headersOutputstreamIdstreamsCancelled_WTEsendFrameToSessionsendCommandToSessiongetFrameFromSession SessionData _sessionInput_sessionOutput_toEncodeHeaders_toDecodeHeaders_stream2HeaderBlockFragment_forWorkerThread_coherentWorker_streamsCancelled_stream2PostInputMechanism_stream2WorkerThreadPostInputMechanismcoherentWorkerforWorkerThread sessionInput sessionOutputstream2HeaderBlockFragmentstream2PostInputMechanismstream2WorkerThreadstreamsCancelledtoDecodeHeaderstoEncodeHeaders http2SessionsessionInputThreadframeEndsStreamcreateMechanismForStreamclosePostDataSourcestreamWorkerSendDatasendBytesToPimpostDataSourceFromMechanism isSettingsAckisStreamCancelled workerThreadsendDataOfStreamappendHeaderFragmentBlockgetHeaderBytesframeIsHeaderOfStreamframeEndsHeadersstreamIdFromFrameheadersOutputThreadbytestringChunkdataOutputThreadFramerSessionData _stream2flow_stream2outputBytes_defaultStreamWindow _canOutput_noHeadersInChannel _pushAction _closeActionNoHeadersInChannel CanOutputStream2AvailSpaceFlowControlCommand AddBytes_FCMBadPrefixExceptionhttp2PrefixLength$fExceptionBadPrefixException FramerSession canOutput closeActiondefaultStreamWindownoHeadersInChannel pushAction stream2flowstream2outputBytes wrapSessionhttp2FrameLength addCapacity inputGathereroutputGathererstartStreamOutputQueuehandleHeadersOfStream pushFrame sendBytesflowControlOutput