r<Qs      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!Like > but it does not try to close the file when reaching the end. 5Since you may abort reading before reaching the end, 1or the run-time system reads more than necessary (you don'&t know how unsafeInterleaveIO works), you never know, whether % has already closed the file or not. .With this function however it is always sure, Dthat the file is not closed and you are responsible for closing it.  Variant of  that may choose smaller chunks *when currently no more data is available. 5The chunk size may however become arbitrarily small, &making the whole process inefficient. =But when real-time fetching counts, it is the better choice. -Read the given number of bytes from a Handle  BCDEFGBCDEFGBCDEFGBCDEFG HIJKLMNOP HIJKLMNOP HPONMLKJI HPONMLKJIIJKLMNOP5Catch IO Errors for which a given predicate is true. QRSTUVWQRSTUVWQRSTUVWQRSTRSTUVW RFC 822 LWSP-char RFC 2616 CRLF  One line (XYZ[\]^_`abcdefghijklmnopqrstuvwxyZ  !"#$%&'()*+,-./0123456789:;<=>?@AXYZ[\]^_`abcdefghijklmnopqrstuvwxy[]^g^ihjk` abcde_@  !"#$%&'()*+,-./0123456789:;<=>?AyflmnopqrstuX\[ZYvwx"X\[ZYYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~ z{|}~ |~}z{z{{|~}}~     J     J     J     J       !"#$%& !"#$%& !"#$%& !"#$%& %'()*+,-./ '()*+,-./ '(-)./*+, '()*+,-./ 01Message formatting function log file path 23012301230123456789:;<=>? 456789:;<=>? 678945:;<=>? 4556789:;<=>? @All the server's information about a request ABCDEFGH @ABCDEFGH @ABCDEFGH @ABCDEFGHABCDEFGHIK7 allows for advanced checks of the appropriate domain, 6e.g. we can catch all subdomains of a certain domain. JKLMNOPWe use the type variable server -although it will be always instantiated with ServerContext.T. KHowever, with this type variable we avoid mutual recursive Haskell modules for Module and ServerContext. IJKLMNOPIJKLMNOPIJKLMNJKLMNOPQRSTUVWXY   Z[\ QRSTUVWXYZ[\ XQRSTUVWYZ[\ QRSTUVWRSTUVWXYZ[\ ]^_`abcdef ]^_`abcdef ]^_`abcdef ]^_`abcd^_`abcdef!       ghijklmnghijklmnghijklmnghijklhijklmnopqropqropqropqrpqr st !"stststu#$%v&wx'()*+KIn earlier versions we did just add the virtual hosts to the ServerAliases in the configuration step. "I think this solution is cleaner. ,uvwxuvwxuvwx y-.z/012345yzyzyz {67|89:;<=>{|{|{|}?@~ABCDEFGHIJKReads lines form the given Handle and log them with =. LMN}~}~}~&Dummy Configuration that forces users to use the lifting mechanism, <which in turn asserts that future extensions are respected. OPQRS TUVWXYZ[\]^ _`abcdefghijklmnopqrstuvwxyz{|}(Get the absolute path from the request. ~"#$"#%"#&"#'"#("#)"#*"#+"#,"#-"./"./".0".1".2".3".4".5".6".7".8".9".:".;".<".=".>".?".@".A".B".C".D".E".F".G".H".I".J".K".L".M".N".O".P".Q".R".S".T".U".V".W".X".Y".Z".[".\".]".^"._".`".a".b".c".d".efghijklmnopqrstluvwxyz{|}~llululu l u l u                                   l  ! " # $ % & ' ( ) * +,-()*+./0123lu456789:lu;<=>?@AABCDEF()*G+luHIJKLMNOluPQR? luSTUVUVWXUVUVUVYZUVUV[\]^_`abcdefghijklmnopqrstuvwxyz{|}~$                   H    Q                            l u    (   %  E(!l!u!!!!H!I!J!K!L!M!O!!!U<U;<U>U=U>U>U>[ S     %B<=>C mohws-0.2.1Network.MoHWS.HTTP.RequestNetwork.MoHWS.HTTP.Header Paths_mohwsNetwork.MoHWS.Logger.LevelNetwork.MoHWS.HTTP.VersionNetwork.MoHWS.StreamNetwork.MoHWS.Server.OptionsNetwork.MoHWS.HTTP.MimeTypeNetwork.MoHWS.ConfigurationNetwork.MoHWS.HTTP.Response$Network.MoHWS.Configuration.Accessor"Network.MoHWS.Configuration.ParserNetwork.MoHWS.LoggerNetwork.MoHWS.Logger.ErrorNetwork.MoHWS.Server.RequestNetwork.MoHWS.ModuleNetwork.MoHWS.Logger.AccessNetwork.MoHWS.Server.Context Network.MoHWS.Module.DescriptionNetwork.MoHWS.Initialization Network.MoHWS.Part.UserDirectoryNetwork.MoHWS.Part.VirtualHostNetwork.MoHWS.Part.AddSlashNetwork.MoHWS.Part.IndexNetwork.MoHWS.Part.CGINetwork.MoHWS.Part.FileNetwork.MoHWS.Part.Listing%Network.MoHWS.Initialization.StandardNetwork.MoHWS.ServerNetwork.MoHWS.ByteStringNetwork.MoHWS.UtilityNetwork.MoHWS.ParserUtility Network.MoHWS.Server.Environment HTTP-4000.1.1Network.HTTP.BaseHEADPUTGETPOSTDELETEOPTIONSTRACECONNECTCustom RequestMethodNetwork.HTTP.HeadersHeaderHdrCacheControl HdrConnectionHdrDate HdrPragmaHdrTransferEncoding HdrUpgradeHdrVia HdrAcceptHdrAcceptCharsetHdrAcceptEncodingHdrAcceptLanguageHdrAuthorization HdrCookie HdrExpectHdrFromHdrHostHdrIfModifiedSince HdrIfMatchHdrIfNoneMatch HdrIfRangeHdrIfUnmodifiedSinceHdrMaxForwardsHdrProxyAuthorizationHdrRange HdrReferer HdrUserAgentHdrAge HdrLocationHdrProxyAuthenticate HdrPublic HdrRetryAfter HdrServer HdrSetCookieHdrTE HdrTrailerHdrVary HdrWarningHdrWWWAuthenticateHdrAllowHdrContentBaseHdrContentEncodingHdrContentLanguageHdrContentLengthHdrContentLocation HdrContentMD5HdrContentRangeHdrContentTypeHdrETag HdrExpiresHdrLastModifiedHdrContentTransferEncoding HdrCustom HeaderName HasHeadersversion getBinDir getLibDir getDataDir getLibexecDirgetDataFileNameTEmergAlertCritErrorWarnNoticeInfoDebugConsmajorminorhttp1_1http1_0 pInRequestTransferCodingDeflateTransferCodingCompressTransferCodingGzipTransferCodingChunkedTransferCodingGroupungroupNamemakegetNamegetValuenamevaluemakeNamegroupgetGroupsetGrouplist modifyManyinsertinsertIfMissingreplace insertMany lookupManylookupmakeContentLengthmakeContentType makeLocationmakeLastModifiedmakeTransferCodinggetContentTypegetContentLengthpGroupExpectExpectContinue ConnectionConnectionOtherConnectionKeepAliveConnectionClosecommanduri httpVersionheadersbodyCommand toHTTPbis fromHTTPbispHeaders getConnectiongetHostCharTypefromChartoCharC fromStringtoStringisEmptylength isPrefixOfbreakdropreadreadAllwrite writeChunked serverRoot configPath inServerRootparse Dictionary fromFileNameloadDictionaryuserlistenrequestTimeoutkeepAliveTimeout maxClients serverAdmin serverName serverAliasuseCanonicalNamehostnameLookups documentRootaccessFileNameindexesfollowSymbolicLinks chunkSize typesConfig defaultType addLanguagelanguagePriority customLogs errorLogFilelogLevel extensiondefltserverSoftware serverVersion extensionAcccode descriptioncoding doSendBodyBodysourcesizeclosecontent decomposeCodeshowStatusLinehasBody getFileNamesendBodysendBodyChunkedbodyFromStringbodyWithSizeFromString statusLine dateHeader serverHeadermakeContmakeSwitchingProtocolsmakeOk makeCreated makeAcceptedmakeNonAuthoritiveInformation makeNoContentmakeResetContentmakePartialContentmakeMultipleChoicesmakeMovedPermanently makeFound makeSeeOthermakeNotModified makeUseProxymakeTemporaryRedirectmakeBadRequestmakeUnauthorizedmakePaymentRequired makeForbidden makeNotFoundmakeMethodNotAllowedmakeNotAcceptablemakeProxyAuthenticationRequiredmakeRequestTimeOut makeConflictmakeGonemakeLengthRequiredmakePreconditionFailedmakeRequestEntityTooLargemakeRequestURITooLargemakeUnsupportedMediaType makeRequestedRangeNotSatisfiablemakeExpectationFailedmakeInternalServerErrormakeNotImplementedmakeBadGatewaymakeServiceUnavailablemakeGatewayTimeOutmakeVersionNotSupporteddescriptionDictionarydescriptionFromCode makeError makeWithBodygenerateErrorPage genErrorHtmlliftfield stringLiteralboolintrunset addToListHandlestartstoplog HasHandle getHandledebugabort debugOnAbortlogErrorlogInfologDebug clientRequest clientAddress clientNamerequestHostName serverURIPathserverFilename serverPort isServerHost translatePath tweakRequest handleRequestempty tweakFilenameRequestrequestresponse serverHosttimedelay mkRequestoptionsconfighostName mimeTypes errorLogger accessLoggers getMimeType logAccessload configParsersetDefltConfig moduleListconfigurationExtensionDefault ConfigurationdescvirtualDocumentRoot virtualFile mkCGIResponsemkCGIEnv ExtensioninitmainmainWithOptions hGetContentsNbytestring-0.9.1.8Data.ByteString.Lazy hGetContentshGetContentsNonBlockingN hGetCharsbindirlibdirdatadir libexecdirnamesdeHex hPutStrCrLfdiereadMreadSMsplitBygluesplits dropPrefix dropSuffix splitPathjoinPathdirnamebasenamehasTrailingSlashformatTimeSensiblyepochTimeToClockTimewaitacceptstatFile statSymLinkstat_ isSymLinkcatchSomeIOErrorspSPpWS1crLfpCRLFlexeme lineStringheaderNameChar especials tokencharpToken textCharspText parseListdropLeadingLWStrimLWS isLWSChargetUntilEmptyLine emptyLine countBetweennameList toNameMaptransferCodingStrpHeaderextraFieldLine pCommandLinecommandDictionarypCommandpURIlaxParseURIReferenceparseConnection parseHost configFileusagedefltConfigFiledefltServerRootparseDictionary parseMimeLine parserLineparserBuilderptokenDef fixConfig configLinep_userp_group p_timeoutp_keepAliveTimeout p_maxClients p_serverAdmin p_serverName p_serverAliasp_useCanonicalNamep_documentRootp_accessFileNamep_followSymbolicLinks p_chunkSize p_typesConfig p_defaultTypep_hostnameLookups p_errorLog p_logLevel p_customLogp_listen p_addLanguagep_languagePriorityLogStopchanformatfile handleChanhandleThreadIdrun1handleCommandsMessagestringloggerminLevelHelp inet_ntoa+^+^:mkLineexpandcontextportmodules mapModules_ foldModules tryModulesuserDir_ defltConfiguserDir p_userDirfunsvirtualDocumentRoot_ virtualFile_p_virtualDocumentRoot p_virtualFile addSlash_addSlash p_addSlashredirectResponseindex_indexp_indexfixPath suffixes_suffixes p_suffixeshandleRequest2findProg firstFile writeBodylogErrorsFromHandle maybeHeaderparseCGIOutput breakHeaders serveFilelisting_listing p_listinghtmlList htmlResponsehtmlDoc virtualHostcgiEIOUnblock hupHandler sigsToBlock readConfig rereadConfiginitServerState loadModule topServerserversserveracceptConnectionstalkgetBody serverRequestserverRequestExcmaybeLookupHostnamegetServerHostNamerequestAbsPathdefaultTranslatePathdefaultHandleRequest hPutHeader