passenger 3.0.4 → 3.0.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- data/NEWS +27 -0
- data/build/common_library.rb +4 -0
- data/doc/ApplicationPool algorithm.txt +1 -1
- data/doc/cxxapi/AbstractSpawnManager_8h_source.html +141 -0
- data/doc/cxxapi/Account_8h_source.html +206 -0
- data/doc/cxxapi/AccountsDatabase_8h_source.html +161 -0
- data/doc/cxxapi/AgentBase_8h_source.html +70 -0
- data/doc/cxxapi/AgentsStarter_8h_source.html +112 -0
- data/doc/cxxapi/BCrypt_8h_source.html +104 -0
- data/doc/cxxapi/Blowfish_8h_source.html +134 -0
- data/doc/cxxapi/Bucket_8h_source.html +118 -0
- data/doc/cxxapi/Constants_8h_source.html +79 -0
- data/doc/cxxapi/ContentHandler_8h_source.html +95 -0
- data/doc/cxxapi/DirectoryMapper_8h_source.html +311 -0
- data/doc/cxxapi/EventedClient_8h_source.html +733 -0
- data/doc/cxxapi/EventedMessageServer_8h_source.html +358 -0
- data/doc/cxxapi/EventedServer_8h_source.html +326 -0
- data/doc/cxxapi/Exceptions_8h_source.html +393 -0
- data/doc/cxxapi/FileDescriptor_8h_source.html +324 -0
- data/doc/cxxapi/Hooks_8h_source.html +76 -0
- data/doc/cxxapi/HttpStatusExtractor_8h_source.html +382 -0
- data/doc/cxxapi/IniFile_8h_source.html +527 -0
- data/doc/cxxapi/Logging_8h_source.html +796 -0
- data/doc/cxxapi/MessageChannel_8h_source.html +776 -0
- data/doc/cxxapi/MessageClient_8h_source.html +328 -0
- data/doc/cxxapi/MessageReadersWriters_8h_source.html +539 -0
- data/doc/cxxapi/MessageServer_8h_source.html +612 -0
- data/doc/cxxapi/PoolOptions_8h_source.html +549 -0
- data/doc/cxxapi/Process_8h_source.html +286 -0
- data/doc/cxxapi/RandomGenerator_8h_source.html +191 -0
- data/doc/cxxapi/ResourceLocator_8h_source.html +166 -0
- data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
- data/doc/cxxapi/ScgiRequestParser_8h_source.html +406 -0
- data/doc/cxxapi/ServerInstanceDir_8h_source.html +378 -0
- data/doc/cxxapi/Session_8h_source.html +501 -0
- data/doc/cxxapi/SpawnManager_8h_source.html +647 -0
- data/doc/cxxapi/StaticContentHandler_8h_source.html +68 -0
- data/doc/cxxapi/StaticString_8h_source.html +329 -0
- data/doc/cxxapi/StringListCreator_8h_source.html +114 -0
- data/doc/cxxapi/Utils_8h_source.html +459 -0
- data/doc/cxxapi/annotated.html +87 -0
- data/doc/cxxapi/apache2_2Configuration_8h_source.html +82 -0
- data/doc/cxxapi/classAgentWatcher-members.html +54 -0
- data/doc/cxxapi/classAgentWatcher.html +419 -0
- data/doc/cxxapi/classClient-members.html +38 -0
- data/doc/cxxapi/classClient.html +123 -0
- data/doc/cxxapi/classHooks-members.html +40 -0
- data/doc/cxxapi/classHooks.html +153 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +40 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +187 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1ArgumentException.html +56 -0
- data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +113 -0
- data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +38 -0
- data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +112 -0
- data/doc/cxxapi/classPassenger_1_1BusyException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1BusyException.html +54 -0
- data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +51 -0
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +41 -0
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +223 -0
- data/doc/cxxapi/classPassenger_1_1EOFException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1EOFException.html +61 -0
- data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1EventFd-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1EventFd.html +52 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +59 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient.html +531 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +59 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer.html +93 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +41 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +178 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +58 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +41 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException.html +66 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +39 -0
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +128 -0
- data/doc/cxxapi/classPassenger_1_1IOException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1IOException.html +61 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +4 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +57 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +839 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +49 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer.html +407 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +58 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +41 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +165 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +39 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +173 -0
- data/doc/cxxapi/classPassenger_1_1Process-members.html +44 -0
- data/doc/cxxapi/classPassenger_1_1Process.html +290 -0
- data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +79 -0
- data/doc/cxxapi/classPassenger_1_1ResourceLocator-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1ResourceLocator.html +51 -0
- data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1RuntimeException.html +54 -0
- data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
- data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +76 -0
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +50 -0
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +285 -0
- data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1SecurityException.html +56 -0
- data/doc/cxxapi/classPassenger_1_1Session-members.html +53 -0
- data/doc/cxxapi/classPassenger_1_1Session.html +556 -0
- data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +39 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +101 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +42 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager.html +292 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +54 -0
- data/doc/cxxapi/classPassenger_1_1StandardSession.html +394 -0
- data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1StaticString-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1StaticString.html +56 -0
- data/doc/cxxapi/classPassenger_1_1SyntaxError-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1SyntaxError.html +54 -0
- data/doc/cxxapi/classPassenger_1_1SystemException-members.html +40 -0
- data/doc/cxxapi/classPassenger_1_1SystemException.html +155 -0
- data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +4 -0
- data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +40 -0
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +61 -0
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1TimeoutException.html +54 -0
- data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint16Message.html +51 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message.html +51 -0
- data/doc/cxxapi/classServer-members.html +36 -0
- data/doc/cxxapi/classServer.html +49 -0
- data/doc/cxxapi/classServerInstanceDirToucher-members.html +36 -0
- data/doc/cxxapi/classServerInstanceDirToucher.html +47 -0
- data/doc/cxxapi/classes.html +52 -0
- data/doc/cxxapi/definitions_8h_source.html +36 -0
- data/doc/cxxapi/doxygen.css +532 -0
- data/doc/cxxapi/doxygen.png +0 -0
- data/doc/cxxapi/files.html +76 -0
- data/doc/cxxapi/ftv2blank.png +0 -0
- data/doc/cxxapi/ftv2doc.png +0 -0
- data/doc/cxxapi/ftv2folderclosed.png +0 -0
- data/doc/cxxapi/ftv2folderopen.png +0 -0
- data/doc/cxxapi/ftv2lastnode.png +0 -0
- data/doc/cxxapi/ftv2link.png +0 -0
- data/doc/cxxapi/ftv2mlastnode.png +0 -0
- data/doc/cxxapi/ftv2mnode.png +0 -0
- data/doc/cxxapi/ftv2node.png +0 -0
- data/doc/cxxapi/ftv2plastnode.png +0 -0
- data/doc/cxxapi/ftv2pnode.png +0 -0
- data/doc/cxxapi/ftv2vertline.png +0 -0
- data/doc/cxxapi/functions.html +103 -0
- data/doc/cxxapi/functions_0x62.html +82 -0
- data/doc/cxxapi/functions_0x63.html +102 -0
- data/doc/cxxapi/functions_0x64.html +102 -0
- data/doc/cxxapi/functions_0x65.html +88 -0
- data/doc/cxxapi/functions_0x66.html +100 -0
- data/doc/cxxapi/functions_0x67.html +167 -0
- data/doc/cxxapi/functions_0x68.html +88 -0
- data/doc/cxxapi/functions_0x69.html +96 -0
- data/doc/cxxapi/functions_0x6b.html +80 -0
- data/doc/cxxapi/functions_0x6c.html +88 -0
- data/doc/cxxapi/functions_0x6d.html +88 -0
- data/doc/cxxapi/functions_0x6e.html +86 -0
- data/doc/cxxapi/functions_0x6f.html +94 -0
- data/doc/cxxapi/functions_0x70.html +94 -0
- data/doc/cxxapi/functions_0x72.html +110 -0
- data/doc/cxxapi/functions_0x73.html +171 -0
- data/doc/cxxapi/functions_0x74.html +85 -0
- data/doc/cxxapi/functions_0x75.html +85 -0
- data/doc/cxxapi/functions_0x77.html +92 -0
- data/doc/cxxapi/functions_0x7e.html +79 -0
- data/doc/cxxapi/functions_enum.html +49 -0
- data/doc/cxxapi/functions_eval.html +67 -0
- data/doc/cxxapi/functions_func.html +531 -0
- data/doc/cxxapi/functions_vars.html +278 -0
- data/doc/cxxapi/graph_legend.dot +22 -0
- data/doc/cxxapi/graph_legend.html +92 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Core.html +46 -0
- data/doc/cxxapi/group__Core.map +3 -0
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Exceptions.html +53 -0
- data/doc/cxxapi/group__Hooks.html +42 -0
- data/doc/cxxapi/group__Hooks.map +3 -0
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/group__Support.html +538 -0
- data/doc/cxxapi/hierarchy.html +101 -0
- data/doc/cxxapi/index.html +16 -0
- data/doc/cxxapi/inherit__graph__0.map +3 -0
- data/doc/cxxapi/inherit__graph__0.md5 +1 -0
- data/doc/cxxapi/inherit__graph__0.png +0 -0
- data/doc/cxxapi/inherit__graph__1.map +3 -0
- data/doc/cxxapi/inherit__graph__1.md5 +1 -0
- data/doc/cxxapi/inherit__graph__1.png +0 -0
- data/doc/cxxapi/inherit__graph__10.map +3 -0
- data/doc/cxxapi/inherit__graph__10.md5 +1 -0
- data/doc/cxxapi/inherit__graph__10.png +0 -0
- data/doc/cxxapi/inherit__graph__11.map +4 -0
- data/doc/cxxapi/inherit__graph__11.md5 +1 -0
- data/doc/cxxapi/inherit__graph__11.png +0 -0
- data/doc/cxxapi/inherit__graph__12.map +3 -0
- data/doc/cxxapi/inherit__graph__12.md5 +1 -0
- data/doc/cxxapi/inherit__graph__12.png +0 -0
- data/doc/cxxapi/inherit__graph__13.map +3 -0
- data/doc/cxxapi/inherit__graph__13.md5 +1 -0
- data/doc/cxxapi/inherit__graph__13.png +0 -0
- data/doc/cxxapi/inherit__graph__14.map +3 -0
- data/doc/cxxapi/inherit__graph__14.md5 +1 -0
- data/doc/cxxapi/inherit__graph__14.png +0 -0
- data/doc/cxxapi/inherit__graph__15.map +3 -0
- data/doc/cxxapi/inherit__graph__15.md5 +1 -0
- data/doc/cxxapi/inherit__graph__15.png +0 -0
- data/doc/cxxapi/inherit__graph__16.map +5 -0
- data/doc/cxxapi/inherit__graph__16.md5 +1 -0
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.map +3 -0
- data/doc/cxxapi/inherit__graph__17.md5 +1 -0
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.map +3 -0
- data/doc/cxxapi/inherit__graph__18.md5 +1 -0
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.map +4 -0
- data/doc/cxxapi/inherit__graph__19.md5 +1 -0
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__2.map +3 -0
- data/doc/cxxapi/inherit__graph__2.md5 +1 -0
- data/doc/cxxapi/inherit__graph__2.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +3 -0
- data/doc/cxxapi/inherit__graph__20.md5 +1 -0
- data/doc/cxxapi/inherit__graph__20.png +0 -0
- data/doc/cxxapi/inherit__graph__21.map +3 -0
- data/doc/cxxapi/inherit__graph__21.md5 +1 -0
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__22.map +3 -0
- data/doc/cxxapi/inherit__graph__22.md5 +1 -0
- data/doc/cxxapi/inherit__graph__22.png +0 -0
- data/doc/cxxapi/inherit__graph__23.map +3 -0
- data/doc/cxxapi/inherit__graph__23.md5 +1 -0
- data/doc/cxxapi/inherit__graph__23.png +0 -0
- data/doc/cxxapi/inherit__graph__24.map +3 -0
- data/doc/cxxapi/inherit__graph__24.md5 +1 -0
- data/doc/cxxapi/inherit__graph__24.png +0 -0
- data/doc/cxxapi/inherit__graph__25.map +3 -0
- data/doc/cxxapi/inherit__graph__25.md5 +1 -0
- data/doc/cxxapi/inherit__graph__25.png +0 -0
- data/doc/cxxapi/inherit__graph__26.map +3 -0
- data/doc/cxxapi/inherit__graph__26.md5 +1 -0
- data/doc/cxxapi/inherit__graph__26.png +0 -0
- data/doc/cxxapi/inherit__graph__27.map +3 -0
- data/doc/cxxapi/inherit__graph__27.md5 +1 -0
- data/doc/cxxapi/inherit__graph__27.png +0 -0
- data/doc/cxxapi/inherit__graph__28.map +3 -0
- data/doc/cxxapi/inherit__graph__28.md5 +1 -0
- data/doc/cxxapi/inherit__graph__28.png +0 -0
- data/doc/cxxapi/inherit__graph__29.map +3 -0
- data/doc/cxxapi/inherit__graph__29.md5 +1 -0
- data/doc/cxxapi/inherit__graph__29.png +0 -0
- data/doc/cxxapi/inherit__graph__3.map +4 -0
- data/doc/cxxapi/inherit__graph__3.md5 +1 -0
- data/doc/cxxapi/inherit__graph__3.png +0 -0
- data/doc/cxxapi/inherit__graph__30.map +3 -0
- data/doc/cxxapi/inherit__graph__30.md5 +1 -0
- data/doc/cxxapi/inherit__graph__30.png +0 -0
- data/doc/cxxapi/inherit__graph__31.map +4 -0
- data/doc/cxxapi/inherit__graph__31.md5 +1 -0
- data/doc/cxxapi/inherit__graph__31.png +0 -0
- data/doc/cxxapi/inherit__graph__32.map +3 -0
- data/doc/cxxapi/inherit__graph__32.md5 +1 -0
- data/doc/cxxapi/inherit__graph__32.png +0 -0
- data/doc/cxxapi/inherit__graph__33.map +3 -0
- data/doc/cxxapi/inherit__graph__33.md5 +1 -0
- data/doc/cxxapi/inherit__graph__33.png +0 -0
- data/doc/cxxapi/inherit__graph__34.map +3 -0
- data/doc/cxxapi/inherit__graph__34.md5 +1 -0
- data/doc/cxxapi/inherit__graph__34.png +0 -0
- data/doc/cxxapi/inherit__graph__35.map +3 -0
- data/doc/cxxapi/inherit__graph__35.md5 +1 -0
- data/doc/cxxapi/inherit__graph__35.png +0 -0
- data/doc/cxxapi/inherit__graph__36.map +5 -0
- data/doc/cxxapi/inherit__graph__36.md5 +1 -0
- data/doc/cxxapi/inherit__graph__36.png +0 -0
- data/doc/cxxapi/inherit__graph__37.map +3 -0
- data/doc/cxxapi/inherit__graph__37.md5 +1 -0
- data/doc/cxxapi/inherit__graph__37.png +0 -0
- data/doc/cxxapi/inherit__graph__38.map +3 -0
- data/doc/cxxapi/inherit__graph__38.md5 +1 -0
- data/doc/cxxapi/inherit__graph__38.png +0 -0
- data/doc/cxxapi/inherit__graph__39.map +3 -0
- data/doc/cxxapi/inherit__graph__39.md5 +1 -0
- data/doc/cxxapi/inherit__graph__39.png +0 -0
- data/doc/cxxapi/inherit__graph__4.map +3 -0
- data/doc/cxxapi/inherit__graph__4.md5 +1 -0
- data/doc/cxxapi/inherit__graph__4.png +0 -0
- data/doc/cxxapi/inherit__graph__40.map +3 -0
- data/doc/cxxapi/inherit__graph__40.md5 +1 -0
- data/doc/cxxapi/inherit__graph__40.png +0 -0
- data/doc/cxxapi/inherit__graph__41.map +3 -0
- data/doc/cxxapi/inherit__graph__41.md5 +1 -0
- data/doc/cxxapi/inherit__graph__41.png +0 -0
- data/doc/cxxapi/inherit__graph__5.map +3 -0
- data/doc/cxxapi/inherit__graph__5.md5 +1 -0
- data/doc/cxxapi/inherit__graph__5.png +0 -0
- data/doc/cxxapi/inherit__graph__6.map +3 -0
- data/doc/cxxapi/inherit__graph__6.md5 +1 -0
- data/doc/cxxapi/inherit__graph__6.png +0 -0
- data/doc/cxxapi/inherit__graph__7.map +3 -0
- data/doc/cxxapi/inherit__graph__7.md5 +1 -0
- data/doc/cxxapi/inherit__graph__7.png +0 -0
- data/doc/cxxapi/inherit__graph__8.map +3 -0
- data/doc/cxxapi/inherit__graph__8.md5 +1 -0
- data/doc/cxxapi/inherit__graph__8.png +0 -0
- data/doc/cxxapi/inherit__graph__9.map +3 -0
- data/doc/cxxapi/inherit__graph__9.md5 +1 -0
- data/doc/cxxapi/inherit__graph__9.png +0 -0
- data/doc/cxxapi/inherits.html +165 -0
- data/doc/cxxapi/main.html +28 -0
- data/doc/cxxapi/modules.html +36 -0
- data/doc/cxxapi/namespacePassenger.html +553 -0
- data/doc/cxxapi/namespacemembers.html +135 -0
- data/doc/cxxapi/namespacemembers_enum.html +48 -0
- data/doc/cxxapi/namespacemembers_eval.html +57 -0
- data/doc/cxxapi/namespacemembers_func.html +111 -0
- data/doc/cxxapi/namespacemembers_type.html +54 -0
- data/doc/cxxapi/namespaces.html +37 -0
- data/doc/cxxapi/nginx_2Configuration_8h_source.html +126 -0
- data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +94 -0
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +36 -0
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +51 -0
- data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +67 -0
- data/doc/cxxapi/structPassenger_1_1PoolOptions.html +647 -0
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +36 -0
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +51 -0
- data/doc/cxxapi/tab_b.gif +0 -0
- data/doc/cxxapi/tab_l.gif +0 -0
- data/doc/cxxapi/tab_r.gif +0 -0
- data/doc/cxxapi/tabs.css +105 -0
- data/doc/cxxapi/tree.html +249 -0
- data/doc/rdoc/classes/ConditionVariable.html +215 -0
- data/doc/rdoc/classes/Exception.html +120 -0
- data/doc/rdoc/classes/GC.html +113 -0
- data/doc/rdoc/classes/IO.html +221 -0
- data/doc/rdoc/classes/PhusionPassenger.html +397 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +180 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +647 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +654 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +619 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +142 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +368 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +231 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +588 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +147 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +279 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +123 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +368 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Lock.html +194 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +299 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +206 -0
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +155 -0
- data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +367 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +95 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +351 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +200 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +410 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +156 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +115 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +202 -0
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
- data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +273 -0
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +162 -0
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +673 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +415 -0
- data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +134 -0
- data/doc/rdoc/classes/PhusionPassenger/Packaging.html +129 -0
- data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +1972 -0
- data/doc/rdoc/classes/PhusionPassenger/Plugin.html +237 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +312 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +218 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +114 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +259 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +139 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +118 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +135 -0
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +378 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone.html +111 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +252 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +161 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +368 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +132 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +151 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +189 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +177 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +341 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +203 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +156 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +168 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +86 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +135 -0
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +1543 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +204 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +171 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +260 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +194 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +265 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +120 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +561 -0
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +182 -0
- data/doc/rdoc/classes/Process.html +115 -0
- data/doc/rdoc/classes/Signal.html +139 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/DEVELOPERS_TXT.html +280 -0
- data/doc/rdoc/files/README.html +157 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +130 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +135 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +141 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +146 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +147 -0
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
- data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +128 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +137 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +160 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +136 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +133 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +136 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +120 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +100 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +179 -0
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +132 -0
- data/doc/rdoc/fr_class_index.html +139 -0
- data/doc/rdoc/fr_file_index.html +108 -0
- data/doc/rdoc/fr_method_index.html +439 -0
- data/doc/rdoc/index.html +26 -0
- data/doc/rdoc/rdoc-style.css +187 -0
- data/ext/apache2/Configuration.cpp +6 -6
- data/ext/apache2/Configuration.hpp +3 -3
- data/ext/apache2/HelperAgent.cpp +1 -1
- data/ext/apache2/Hooks.cpp +3 -3
- data/ext/common/ApplicationPool/Pool.h +1 -1
- data/ext/common/ApplicationPool/Server.h +5 -2
- data/ext/common/Constants.h +1 -1
- data/ext/common/LoggingAgent/FilterSupport.cpp +66 -0
- data/ext/common/LoggingAgent/FilterSupport.h +262 -73
- data/ext/common/LoggingAgent/RemoteSender.h +13 -4
- data/ext/common/Utils/CachedFileStat.cpp +6 -12
- data/ext/common/Utils/CachedFileStat.h +4 -4
- data/ext/common/libboost_oxt/aggregate.cpp +10 -0
- data/ext/common/libpassenger_common/aggregate.cpp +16 -0
- data/ext/nginx/Configuration.c +77 -4
- data/ext/nginx/Configuration.h +2 -1
- data/ext/nginx/ContentHandler.c +32 -4
- data/ext/nginx/HelperAgent.cpp +5 -4
- data/ext/nginx/ngx_http_passenger_module.c +6 -6
- data/ext/nginx/ngx_http_passenger_module.h +5 -5
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/abstract_request_handler.rb +4 -1
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +3 -1
- data/lib/phusion_passenger/standalone/runtime_installer.rb +1 -1
- data/lib/phusion_passenger/standalone/start_command.rb +6 -0
- data/lib/phusion_passenger/templates/standalone/config.erb +1 -1
- data/test/cxx/FilterSupportTest.cpp +135 -5
- metadata +547 -4
@@ -0,0 +1,527 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5
|
+
<title>Passenger: IniFile.h Source File</title>
|
6
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
7
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<!-- Generated by Doxygen 1.6.2 -->
|
11
|
+
<div class="navigation" id="top">
|
12
|
+
<div class="tabs">
|
13
|
+
<ul>
|
14
|
+
<li><a href="main.html"><span>Main Page</span></a></li>
|
15
|
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
16
|
+
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
17
|
+
<li><a href="annotated.html"><span>Classes</span></a></li>
|
18
|
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
19
|
+
</ul>
|
20
|
+
</div>
|
21
|
+
<div class="tabs">
|
22
|
+
<ul>
|
23
|
+
<li><a href="files.html"><span>File List</span></a></li>
|
24
|
+
</ul>
|
25
|
+
</div>
|
26
|
+
<h1>IniFile.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef _PASSENGER_INI_FILE_H_</span>
|
27
|
+
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_INI_FILE_H_</span>
|
28
|
+
<a name="l00003"></a>00003 <span class="preprocessor"></span>
|
29
|
+
<a name="l00004"></a>00004 <span class="preprocessor">#include <utility></span>
|
30
|
+
<a name="l00005"></a>00005 <span class="preprocessor">#include <string></span>
|
31
|
+
<a name="l00006"></a>00006 <span class="preprocessor">#include <map></span>
|
32
|
+
<a name="l00007"></a>00007 <span class="preprocessor">#include <fstream></span>
|
33
|
+
<a name="l00008"></a>00008 <span class="preprocessor">#include <iostream></span>
|
34
|
+
<a name="l00009"></a>00009 <span class="preprocessor">#include <cstdio></span>
|
35
|
+
<a name="l00010"></a>00010 <span class="preprocessor">#include <cstring></span>
|
36
|
+
<a name="l00011"></a>00011 <span class="preprocessor">#include <cassert></span>
|
37
|
+
<a name="l00012"></a>00012 <span class="preprocessor">#include <cctype></span>
|
38
|
+
<a name="l00013"></a>00013 <span class="preprocessor">#include <boost/shared_ptr.hpp></span>
|
39
|
+
<a name="l00014"></a>00014 <span class="preprocessor">#include <boost/make_shared.hpp></span>
|
40
|
+
<a name="l00015"></a>00015 <span class="preprocessor">#include <Exceptions.h></span>
|
41
|
+
<a name="l00016"></a>00016
|
42
|
+
<a name="l00017"></a>00017 <span class="keyword">namespace </span>Passenger {
|
43
|
+
<a name="l00018"></a>00018
|
44
|
+
<a name="l00019"></a>00019 <span class="keyword">using namespace </span>std;
|
45
|
+
<a name="l00020"></a>00020 <span class="keyword">using namespace </span>boost;
|
46
|
+
<a name="l00021"></a>00021
|
47
|
+
<a name="l00022"></a>00022
|
48
|
+
<a name="l00023"></a>00023 <span class="keyword">class </span>IniFileSection {
|
49
|
+
<a name="l00024"></a>00024 <span class="keyword">protected</span>:
|
50
|
+
<a name="l00025"></a>00025 <span class="keyword">typedef</span> map<string, string> ValueMap;
|
51
|
+
<a name="l00026"></a>00026 <span class="keywordtype">string</span> sectionName;
|
52
|
+
<a name="l00027"></a>00027 ValueMap values;
|
53
|
+
<a name="l00028"></a>00028
|
54
|
+
<a name="l00029"></a>00029 <span class="keyword">public</span>:
|
55
|
+
<a name="l00030"></a>00030 IniFileSection(<span class="keyword">const</span> <span class="keywordtype">string</span> &sectionName) {
|
56
|
+
<a name="l00031"></a>00031 this->sectionName = sectionName;
|
57
|
+
<a name="l00032"></a>00032 }
|
58
|
+
<a name="l00033"></a>00033
|
59
|
+
<a name="l00034"></a>00034 <span class="keywordtype">bool</span> hasKey(<span class="keyword">const</span> <span class="keywordtype">string</span> &keyName)<span class="keyword"> const </span>{
|
60
|
+
<a name="l00035"></a>00035 <span class="keywordflow">return</span> values.find(keyName) != values.end();
|
61
|
+
<a name="l00036"></a>00036 }
|
62
|
+
<a name="l00037"></a>00037
|
63
|
+
<a name="l00038"></a>00038 <span class="keywordtype">string</span> <span class="keyword">get</span>(<span class="keyword">const</span> <span class="keywordtype">string</span> &keyName) <span class="keyword">const</span> {
|
64
|
+
<a name="l00039"></a>00039 ValueMap::const_iterator it = values.find(keyName);
|
65
|
+
<a name="l00040"></a>00040 <span class="keywordflow">if</span> (it != values.end()) {
|
66
|
+
<a name="l00041"></a>00041 <span class="keywordflow">return</span> it->second;
|
67
|
+
<a name="l00042"></a>00042 } <span class="keywordflow">else</span> {
|
68
|
+
<a name="l00043"></a>00043 <span class="keywordflow">return</span> string();
|
69
|
+
<a name="l00044"></a>00044 }
|
70
|
+
<a name="l00045"></a>00045 }
|
71
|
+
<a name="l00046"></a>00046
|
72
|
+
<a name="l00047"></a>00047 <span class="keywordtype">string</span> operator[](<span class="keyword">const</span> <span class="keywordtype">string</span> &keyName)<span class="keyword"> const </span>{
|
73
|
+
<a name="l00048"></a>00048 <span class="keywordflow">return</span> <span class="keyword">get</span>(keyName);
|
74
|
+
<a name="l00049"></a>00049 }
|
75
|
+
<a name="l00050"></a>00050
|
76
|
+
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keyword">const</span> <span class="keywordtype">string</span> &keyName, <span class="keyword">const</span> <span class="keywordtype">string</span> &value) {
|
77
|
+
<a name="l00052"></a>00052 values[keyName] = value;
|
78
|
+
<a name="l00053"></a>00053 }
|
79
|
+
<a name="l00054"></a>00054
|
80
|
+
<a name="l00055"></a>00055 <span class="keywordtype">string</span> getSectionName()<span class="keyword"> const </span>{
|
81
|
+
<a name="l00056"></a>00056 <span class="keywordflow">return</span> sectionName;
|
82
|
+
<a name="l00057"></a>00057 }
|
83
|
+
<a name="l00058"></a>00058
|
84
|
+
<a name="l00059"></a>00059 <span class="keywordtype">void</span> inspect()<span class="keyword"> const </span>{
|
85
|
+
<a name="l00060"></a>00060 ValueMap::const_iterator it = values.begin();
|
86
|
+
<a name="l00061"></a>00061 <span class="keywordflow">while</span> (it != values.end()) {
|
87
|
+
<a name="l00062"></a>00062 cout << it->first << <span class="stringliteral">" = "</span> << it->second << endl;
|
88
|
+
<a name="l00063"></a>00063 it++;
|
89
|
+
<a name="l00064"></a>00064 }
|
90
|
+
<a name="l00065"></a>00065 }
|
91
|
+
<a name="l00066"></a>00066 };
|
92
|
+
<a name="l00067"></a>00067
|
93
|
+
<a name="l00068"></a>00068 <span class="keyword">class </span>IniFileLexer {
|
94
|
+
<a name="l00069"></a>00069 <span class="keyword">public</span>:
|
95
|
+
<a name="l00070"></a>00070 <span class="keyword">class </span>Token {
|
96
|
+
<a name="l00071"></a>00071 <span class="keyword">public</span>:
|
97
|
+
<a name="l00072"></a>00072 <span class="keyword">enum</span> Kind {
|
98
|
+
<a name="l00073"></a>00073 UNKNOWN = 0,
|
99
|
+
<a name="l00074"></a>00074 NEWLINE,
|
100
|
+
<a name="l00075"></a>00075 SECTION_NAME,
|
101
|
+
<a name="l00076"></a>00076 IDENTIFIER,
|
102
|
+
<a name="l00077"></a>00077 ASSIGNMENT,
|
103
|
+
<a name="l00078"></a>00078 TEXT,
|
104
|
+
<a name="l00079"></a>00079 END_OF_FILE
|
105
|
+
<a name="l00080"></a>00080 };
|
106
|
+
<a name="l00081"></a>00081
|
107
|
+
<a name="l00082"></a>00082 <span class="keyword">const</span> Kind kind;
|
108
|
+
<a name="l00083"></a>00083 <span class="keyword">const</span> <span class="keywordtype">string</span> value;
|
109
|
+
<a name="l00084"></a>00084 <span class="keyword">const</span> <span class="keywordtype">int</span> line;
|
110
|
+
<a name="l00085"></a>00085 <span class="keyword">const</span> <span class="keywordtype">int</span> column;
|
111
|
+
<a name="l00086"></a>00086
|
112
|
+
<a name="l00087"></a>00087 <span class="comment">// String representations of the Kind enum.</span>
|
113
|
+
<a name="l00088"></a>00088 <span class="keyword">const</span> <span class="keyword">static</span> <span class="keywordtype">char</span> *identityByKind(Kind kind) {
|
114
|
+
<a name="l00089"></a>00089 <span class="keyword">const</span> <span class="keyword">static</span> <span class="keywordtype">char</span>* KIND_IDENTITY_TABLE[] = {
|
115
|
+
<a name="l00090"></a>00090 <span class="stringliteral">"<T_UNKNOWN>"</span>,
|
116
|
+
<a name="l00091"></a>00091 <span class="stringliteral">"<T_NEWLINE>"</span>,
|
117
|
+
<a name="l00092"></a>00092 <span class="stringliteral">"<T_SECTION_NAME>"</span>,
|
118
|
+
<a name="l00093"></a>00093 <span class="stringliteral">"<T_IDENTIFIER>"</span>,
|
119
|
+
<a name="l00094"></a>00094 <span class="stringliteral">"<T_ASSIGNMENT>"</span>,
|
120
|
+
<a name="l00095"></a>00095 <span class="stringliteral">"<T_TEXT>"</span>,
|
121
|
+
<a name="l00096"></a>00096 <span class="stringliteral">"<T_EOF>"</span>
|
122
|
+
<a name="l00097"></a>00097 };
|
123
|
+
<a name="l00098"></a>00098
|
124
|
+
<a name="l00099"></a>00099 <span class="keywordflow">return</span> KIND_IDENTITY_TABLE[kind];
|
125
|
+
<a name="l00100"></a>00100 }
|
126
|
+
<a name="l00101"></a>00101
|
127
|
+
<a name="l00102"></a>00102 Token(<span class="keyword">const</span> Kind kind, <span class="keyword">const</span> <span class="keywordtype">string</span> &value, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">int</span> column)
|
128
|
+
<a name="l00103"></a>00103 : kind(kind), value(value), line(line), column(column) {
|
129
|
+
<a name="l00104"></a>00104
|
130
|
+
<a name="l00105"></a>00105 }
|
131
|
+
<a name="l00106"></a>00106
|
132
|
+
<a name="l00107"></a>00107 <span class="keyword">class </span>ExpectanceException : <span class="keyword">public</span> std::exception {
|
133
|
+
<a name="l00108"></a>00108 <span class="keyword">private</span>:
|
134
|
+
<a name="l00109"></a>00109 <span class="keywordtype">char</span> message[255];
|
135
|
+
<a name="l00110"></a>00110
|
136
|
+
<a name="l00111"></a>00111 <span class="keyword">public</span>:
|
137
|
+
<a name="l00112"></a>00112 ExpectanceException(<span class="keywordtype">char</span> expected, <span class="keywordtype">char</span> got, <span class="keywordtype">int</span> line, <span class="keywordtype">int</span> column) {
|
138
|
+
<a name="l00113"></a>00113 <span class="keywordtype">int</span> messageSize = <span class="keyword">sizeof</span>(message);
|
139
|
+
<a name="l00114"></a>00114 memset(message, 0, messageSize);
|
140
|
+
<a name="l00115"></a>00115 snprintf(message, messageSize,
|
141
|
+
<a name="l00116"></a>00116 <span class="stringliteral">"On line %i, column %i: Expected '%c', got '%c' instead."</span>,
|
142
|
+
<a name="l00117"></a>00117 line, column, expected, got);
|
143
|
+
<a name="l00118"></a>00118 }
|
144
|
+
<a name="l00119"></a>00119
|
145
|
+
<a name="l00120"></a>00120 ExpectanceException(Token::Kind expected, Token got) {
|
146
|
+
<a name="l00121"></a>00121 <span class="keyword">const</span> <span class="keywordtype">char</span> *expectedKindString = Token::identityByKind(expected);
|
147
|
+
<a name="l00122"></a>00122 <span class="keywordtype">int</span> messageSize = <span class="keyword">sizeof</span>(message);
|
148
|
+
<a name="l00123"></a>00123 memset(message, 0, messageSize);
|
149
|
+
<a name="l00124"></a>00124 snprintf(message, messageSize,
|
150
|
+
<a name="l00125"></a>00125 <span class="stringliteral">"On line %i, column %i: Expected '%s', got '%s' instead."</span>,
|
151
|
+
<a name="l00126"></a>00126 got.line, got.column, expectedKindString, got.value.c_str());
|
152
|
+
<a name="l00127"></a>00127 }
|
153
|
+
<a name="l00128"></a>00128
|
154
|
+
<a name="l00129"></a>00129 ExpectanceException(<span class="keywordtype">char</span> expected, Token::Kind got, <span class="keywordtype">int</span> line, <span class="keywordtype">int</span> column) {
|
155
|
+
<a name="l00130"></a>00130 <span class="keyword">const</span> <span class="keywordtype">char</span> *gotKindString = Token::identityByKind(got);
|
156
|
+
<a name="l00131"></a>00131 <span class="keywordtype">int</span> messageSize = <span class="keyword">sizeof</span>(message);
|
157
|
+
<a name="l00132"></a>00132 memset(message, 0, messageSize);
|
158
|
+
<a name="l00133"></a>00133 snprintf(message, messageSize,
|
159
|
+
<a name="l00134"></a>00134 <span class="stringliteral">"On line %i, column %i: Expected '%c', got '%s' instead."</span>,
|
160
|
+
<a name="l00135"></a>00135 line, column, expected, gotKindString);
|
161
|
+
<a name="l00136"></a>00136 }
|
162
|
+
<a name="l00137"></a>00137
|
163
|
+
<a name="l00138"></a>00138 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> throw() {
|
164
|
+
<a name="l00139"></a>00139 <span class="keywordflow">return</span> message;
|
165
|
+
<a name="l00140"></a>00140 }
|
166
|
+
<a name="l00141"></a>00141 };
|
167
|
+
<a name="l00142"></a>00142 };
|
168
|
+
<a name="l00143"></a>00143
|
169
|
+
<a name="l00144"></a>00144 <span class="keyword">typedef</span> shared_ptr<IniFileLexer::Token> TokenPtr;
|
170
|
+
<a name="l00145"></a>00145
|
171
|
+
<a name="l00146"></a>00146
|
172
|
+
<a name="l00147"></a>00147
|
173
|
+
<a name="l00148"></a>00148 <span class="keyword">protected</span>:
|
174
|
+
<a name="l00149"></a>00149 ifstream iniFileStream;
|
175
|
+
<a name="l00150"></a>00150
|
176
|
+
<a name="l00151"></a>00151 <span class="keywordtype">char</span> lastAcceptedChar;
|
177
|
+
<a name="l00152"></a>00152 <span class="keywordtype">char</span> upcomingChar;
|
178
|
+
<a name="l00153"></a>00153 <span class="keywordtype">bool</span> upcomingTokenPtrIsStale;
|
179
|
+
<a name="l00154"></a>00154
|
180
|
+
<a name="l00155"></a>00155 <span class="keywordtype">int</span> currentLine;
|
181
|
+
<a name="l00156"></a>00156 <span class="keywordtype">int</span> currentColumn;
|
182
|
+
<a name="l00157"></a>00157
|
183
|
+
<a name="l00158"></a>00158 TokenPtr upcomingTokenPtr;
|
184
|
+
<a name="l00159"></a>00159
|
185
|
+
<a name="l00160"></a>00160 <span class="keywordtype">void</span> expect(<span class="keywordtype">char</span> ch) {
|
186
|
+
<a name="l00161"></a>00161 <span class="keywordtype">char</span> upcomingChar = (char)iniFileStream.peek();
|
187
|
+
<a name="l00162"></a>00162
|
188
|
+
<a name="l00163"></a>00163 <span class="keywordflow">if</span> (ch != upcomingChar) {
|
189
|
+
<a name="l00164"></a>00164 <span class="keywordflow">switch</span>(upcomingChar) {
|
190
|
+
<a name="l00165"></a>00165 <span class="keywordflow">case</span> EOF:
|
191
|
+
<a name="l00166"></a>00166 <span class="keywordflow">throw</span> Token::ExpectanceException(ch, Token::END_OF_FILE,
|
192
|
+
<a name="l00167"></a>00167 currentLine, currentColumn + 1);
|
193
|
+
<a name="l00168"></a>00168 <span class="keywordflow">case</span> <span class="charliteral">'\n'</span>:
|
194
|
+
<a name="l00169"></a>00169 <span class="keywordflow">throw</span> Token::ExpectanceException(ch, upcomingChar,
|
195
|
+
<a name="l00170"></a>00170 currentLine + 1, 0);
|
196
|
+
<a name="l00171"></a>00171 <span class="keywordflow">default</span>:
|
197
|
+
<a name="l00172"></a>00172 <span class="keywordflow">throw</span> Token::ExpectanceException(ch, upcomingChar,
|
198
|
+
<a name="l00173"></a>00173 currentLine, currentColumn + 1);
|
199
|
+
<a name="l00174"></a>00174 }
|
200
|
+
<a name="l00175"></a>00175 }
|
201
|
+
<a name="l00176"></a>00176 }
|
202
|
+
<a name="l00177"></a>00177
|
203
|
+
<a name="l00178"></a>00178 <span class="keywordtype">void</span> accept() {
|
204
|
+
<a name="l00179"></a>00179 <span class="keywordflow">if</span> (upcomingChar == EOF) <span class="keywordflow">return</span>;
|
205
|
+
<a name="l00180"></a>00180
|
206
|
+
<a name="l00181"></a>00181 lastAcceptedChar = (char)iniFileStream.get();
|
207
|
+
<a name="l00182"></a>00182 upcomingChar = (char)iniFileStream.peek();
|
208
|
+
<a name="l00183"></a>00183 currentColumn++;
|
209
|
+
<a name="l00184"></a>00184
|
210
|
+
<a name="l00185"></a>00185 <span class="keywordflow">if</span> (lastAcceptedChar == <span class="charliteral">'\n'</span>) {
|
211
|
+
<a name="l00186"></a>00186 currentLine++;
|
212
|
+
<a name="l00187"></a>00187 currentColumn = 1;
|
213
|
+
<a name="l00188"></a>00188 }
|
214
|
+
<a name="l00189"></a>00189 }
|
215
|
+
<a name="l00190"></a>00190
|
216
|
+
<a name="l00191"></a>00191 <span class="keywordtype">void</span> ignore() {
|
217
|
+
<a name="l00192"></a>00192 <span class="keywordflow">if</span> (upcomingChar == EOF) <span class="keywordflow">return</span>;
|
218
|
+
<a name="l00193"></a>00193
|
219
|
+
<a name="l00194"></a>00194 upcomingChar = (char)iniFileStream.peek();
|
220
|
+
<a name="l00195"></a>00195 currentColumn++;
|
221
|
+
<a name="l00196"></a>00196
|
222
|
+
<a name="l00197"></a>00197 <span class="keywordflow">if</span> ((<span class="keywordtype">char</span>)iniFileStream.get() == <span class="charliteral">'\n'</span>) {
|
223
|
+
<a name="l00198"></a>00198 currentLine++;
|
224
|
+
<a name="l00199"></a>00199 currentColumn = 1;
|
225
|
+
<a name="l00200"></a>00200 }
|
226
|
+
<a name="l00201"></a>00201 }
|
227
|
+
<a name="l00202"></a>00202
|
228
|
+
<a name="l00203"></a>00203 <span class="keywordtype">void</span> expectAndAccept(<span class="keywordtype">char</span> ch) {
|
229
|
+
<a name="l00204"></a>00204 expect(ch);
|
230
|
+
<a name="l00205"></a>00205 accept();
|
231
|
+
<a name="l00206"></a>00206 }
|
232
|
+
<a name="l00207"></a>00207
|
233
|
+
<a name="l00208"></a>00208 <span class="keywordtype">void</span> acceptWhileNewLine() {
|
234
|
+
<a name="l00209"></a>00209 <span class="keywordflow">while</span> (iniFileStream.good() && upcomingChar == <span class="charliteral">'\n'</span>) {
|
235
|
+
<a name="l00210"></a>00210 accept();
|
236
|
+
<a name="l00211"></a>00211 }
|
237
|
+
<a name="l00212"></a>00212 }
|
238
|
+
<a name="l00213"></a>00213
|
239
|
+
<a name="l00214"></a>00214 <span class="keywordtype">void</span> ignoreWhileNotNewLine() {
|
240
|
+
<a name="l00215"></a>00215 <span class="keywordflow">while</span> (iniFileStream.good() && upcomingChar != <span class="charliteral">'\n'</span>) {
|
241
|
+
<a name="l00216"></a>00216 ignore();
|
242
|
+
<a name="l00217"></a>00217 }
|
243
|
+
<a name="l00218"></a>00218 }
|
244
|
+
<a name="l00219"></a>00219
|
245
|
+
<a name="l00220"></a>00220 Token tokenizeIdentifier() {
|
246
|
+
<a name="l00221"></a>00221 <span class="keywordtype">int</span> line = currentLine;
|
247
|
+
<a name="l00222"></a>00222 <span class="keywordtype">int</span> column = currentColumn;
|
248
|
+
<a name="l00223"></a>00223 <span class="keywordtype">string</span> result;
|
249
|
+
<a name="l00224"></a>00224
|
250
|
+
<a name="l00225"></a>00225 <span class="keywordflow">while</span> (isalnum(upcomingChar) || upcomingChar == <span class="charliteral">'_'</span> || upcomingChar == <span class="charliteral">'-'</span>) {
|
251
|
+
<a name="l00226"></a>00226 result.append(1, upcomingChar);
|
252
|
+
<a name="l00227"></a>00227 accept();
|
253
|
+
<a name="l00228"></a>00228 }
|
254
|
+
<a name="l00229"></a>00229
|
255
|
+
<a name="l00230"></a>00230 <span class="keywordflow">return</span> Token(Token::IDENTIFIER, result, line, column);
|
256
|
+
<a name="l00231"></a>00231 }
|
257
|
+
<a name="l00232"></a>00232
|
258
|
+
<a name="l00233"></a>00233 Token tokenizeSection() {
|
259
|
+
<a name="l00234"></a>00234 expectAndAccept(<span class="charliteral">'['</span>);
|
260
|
+
<a name="l00235"></a>00235 Token sectionName = tokenizeSectionName();
|
261
|
+
<a name="l00236"></a>00236 expectAndAccept(<span class="charliteral">']'</span>);
|
262
|
+
<a name="l00237"></a>00237 <span class="keywordflow">return</span> sectionName;
|
263
|
+
<a name="l00238"></a>00238 }
|
264
|
+
<a name="l00239"></a>00239
|
265
|
+
<a name="l00240"></a>00240 Token tokenizeSectionName() {
|
266
|
+
<a name="l00241"></a>00241 <span class="keywordtype">int</span> line = currentLine;
|
267
|
+
<a name="l00242"></a>00242 <span class="keywordtype">int</span> column = currentColumn;
|
268
|
+
<a name="l00243"></a>00243 <span class="keywordtype">string</span> result;
|
269
|
+
<a name="l00244"></a>00244
|
270
|
+
<a name="l00245"></a>00245 <span class="comment">//while (upcomingChar != ']' && upcomingChar != '[' && upcomingChar != '\n' && upcomingChar != EOF) {</span>
|
271
|
+
<a name="l00246"></a>00246 <span class="keywordflow">while</span> (isalnum(upcomingChar) || upcomingChar == <span class="charliteral">'_'</span> || upcomingChar == <span class="charliteral">'-'</span>) {
|
272
|
+
<a name="l00247"></a>00247 result.append(1, upcomingChar);
|
273
|
+
<a name="l00248"></a>00248 accept();
|
274
|
+
<a name="l00249"></a>00249 }
|
275
|
+
<a name="l00250"></a>00250
|
276
|
+
<a name="l00251"></a>00251 <span class="keywordflow">return</span> Token(Token::SECTION_NAME, result, line, column);
|
277
|
+
<a name="l00252"></a>00252 }
|
278
|
+
<a name="l00253"></a>00253
|
279
|
+
<a name="l00254"></a>00254 Token tokenizeAssignment() {
|
280
|
+
<a name="l00255"></a>00255 expectAndAccept(<span class="charliteral">'='</span>);
|
281
|
+
<a name="l00256"></a>00256 <span class="keywordflow">return</span> Token(Token::ASSIGNMENT, <span class="stringliteral">"="</span>, currentLine, currentColumn);
|
282
|
+
<a name="l00257"></a>00257 }
|
283
|
+
<a name="l00258"></a>00258
|
284
|
+
<a name="l00259"></a>00259 Token tokenizeText() {
|
285
|
+
<a name="l00260"></a>00260 <span class="keywordtype">int</span> line = currentLine;
|
286
|
+
<a name="l00261"></a>00261 <span class="keywordtype">int</span> column = currentColumn;
|
287
|
+
<a name="l00262"></a>00262 <span class="keywordtype">string</span> result;
|
288
|
+
<a name="l00263"></a>00263
|
289
|
+
<a name="l00264"></a>00264 <span class="keywordflow">while</span> (upcomingChar != <span class="charliteral">'\n'</span> && upcomingChar != EOF) {
|
290
|
+
<a name="l00265"></a>00265 result.append(1, upcomingChar);
|
291
|
+
<a name="l00266"></a>00266 accept();
|
292
|
+
<a name="l00267"></a>00267 }
|
293
|
+
<a name="l00268"></a>00268
|
294
|
+
<a name="l00269"></a>00269 <span class="keywordflow">return</span> Token(Token::TEXT, result, line, column);
|
295
|
+
<a name="l00270"></a>00270 }
|
296
|
+
<a name="l00271"></a>00271
|
297
|
+
<a name="l00272"></a>00272 Token tokenizeKey() {
|
298
|
+
<a name="l00273"></a>00273 <span class="keywordflow">return</span> tokenizeIdentifier();
|
299
|
+
<a name="l00274"></a>00274 }
|
300
|
+
<a name="l00275"></a>00275
|
301
|
+
<a name="l00276"></a>00276 Token tokenizeValue() {
|
302
|
+
<a name="l00277"></a>00277 <span class="keywordflow">return</span> tokenizeText();
|
303
|
+
<a name="l00278"></a>00278 }
|
304
|
+
<a name="l00279"></a>00279
|
305
|
+
<a name="l00280"></a>00280 Token tokenizeUnknown() {
|
306
|
+
<a name="l00281"></a>00281 <span class="keywordtype">int</span> line = currentLine;
|
307
|
+
<a name="l00282"></a>00282 <span class="keywordtype">int</span> column = currentColumn;
|
308
|
+
<a name="l00283"></a>00283 <span class="keywordtype">string</span> result;
|
309
|
+
<a name="l00284"></a>00284
|
310
|
+
<a name="l00285"></a>00285 <span class="keywordflow">while</span> (upcomingChar != EOF) {
|
311
|
+
<a name="l00286"></a>00286 result.append(1, upcomingChar);
|
312
|
+
<a name="l00287"></a>00287 accept();
|
313
|
+
<a name="l00288"></a>00288 }
|
314
|
+
<a name="l00289"></a>00289
|
315
|
+
<a name="l00290"></a>00290 <span class="keywordflow">return</span> Token(Token::UNKNOWN, result, line, column);
|
316
|
+
<a name="l00291"></a>00291 }
|
317
|
+
<a name="l00292"></a>00292
|
318
|
+
<a name="l00293"></a>00293 <span class="keyword">public</span>:
|
319
|
+
<a name="l00294"></a>00294 IniFileLexer(<span class="keyword">const</span> <span class="keywordtype">string</span> &fileName) {
|
320
|
+
<a name="l00295"></a>00295 currentLine = 1;
|
321
|
+
<a name="l00296"></a>00296 currentColumn = 1;
|
322
|
+
<a name="l00297"></a>00297 upcomingTokenPtrIsStale = <span class="keyword">true</span>;
|
323
|
+
<a name="l00298"></a>00298 iniFileStream.open(fileName.c_str());
|
324
|
+
<a name="l00299"></a>00299 <span class="keywordflow">if</span> (iniFileStream.fail()) {
|
325
|
+
<a name="l00300"></a>00300 <span class="keywordtype">int</span> e = errno;
|
326
|
+
<a name="l00301"></a>00301 <span class="keywordflow">throw</span> FileSystemException(<span class="stringliteral">"Cannot open file '"</span> + fileName + <span class="stringliteral">"' for reading"</span>,
|
327
|
+
<a name="l00302"></a>00302 e, fileName);
|
328
|
+
<a name="l00303"></a>00303 }
|
329
|
+
<a name="l00304"></a>00304 }
|
330
|
+
<a name="l00305"></a>00305
|
331
|
+
<a name="l00306"></a>00306 ~IniFileLexer() {
|
332
|
+
<a name="l00307"></a>00307 iniFileStream.close();
|
333
|
+
<a name="l00308"></a>00308 }
|
334
|
+
<a name="l00309"></a>00309
|
335
|
+
<a name="l00310"></a>00310 <span class="keywordtype">int</span> getCurrentLine() {
|
336
|
+
<a name="l00311"></a>00311 <span class="keywordflow">return</span> currentLine;
|
337
|
+
<a name="l00312"></a>00312 }
|
338
|
+
<a name="l00313"></a>00313
|
339
|
+
<a name="l00314"></a>00314 <span class="keywordtype">int</span> getCurrentColumn() {
|
340
|
+
<a name="l00315"></a>00315 <span class="keywordflow">return</span> currentColumn;
|
341
|
+
<a name="l00316"></a>00316 }
|
342
|
+
<a name="l00317"></a>00317
|
343
|
+
<a name="l00318"></a>00318 TokenPtr peekToken() {
|
344
|
+
<a name="l00319"></a>00319 <span class="keywordflow">if</span> (upcomingTokenPtrIsStale) {
|
345
|
+
<a name="l00320"></a>00320 Token upcomingToken = getToken();
|
346
|
+
<a name="l00321"></a>00321 upcomingTokenPtr = make_shared<Token>(upcomingToken);
|
347
|
+
<a name="l00322"></a>00322 upcomingTokenPtrIsStale = <span class="keyword">false</span>;
|
348
|
+
<a name="l00323"></a>00323 }
|
349
|
+
<a name="l00324"></a>00324
|
350
|
+
<a name="l00325"></a>00325 <span class="keywordflow">return</span> upcomingTokenPtr;
|
351
|
+
<a name="l00326"></a>00326 }
|
352
|
+
<a name="l00327"></a>00327
|
353
|
+
<a name="l00328"></a>00328 Token getToken() {
|
354
|
+
<a name="l00329"></a>00329 <span class="keywordflow">if</span> (!upcomingTokenPtrIsStale) {
|
355
|
+
<a name="l00330"></a>00330 upcomingTokenPtrIsStale = <span class="keyword">true</span>;
|
356
|
+
<a name="l00331"></a>00331 <span class="keywordflow">return</span> *upcomingTokenPtr;
|
357
|
+
<a name="l00332"></a>00332 }
|
358
|
+
<a name="l00333"></a>00333
|
359
|
+
<a name="l00334"></a>00334 <span class="keywordflow">while</span> (iniFileStream.good()) {
|
360
|
+
<a name="l00335"></a>00335 upcomingChar = (char)iniFileStream.peek();
|
361
|
+
<a name="l00336"></a>00336 <span class="keywordflow">switch</span>(upcomingChar) {
|
362
|
+
<a name="l00337"></a>00337 <span class="keywordflow">case</span> <span class="charliteral">'['</span>:
|
363
|
+
<a name="l00338"></a>00338 <span class="keywordflow">return</span> tokenizeSection();
|
364
|
+
<a name="l00339"></a>00339 <span class="keywordflow">case</span> <span class="charliteral">'\n'</span>:
|
365
|
+
<a name="l00340"></a>00340 <span class="keywordflow">if</span> (lastAcceptedChar != <span class="charliteral">'\n'</span>) {
|
366
|
+
<a name="l00341"></a>00341 accept();
|
367
|
+
<a name="l00342"></a>00342 <span class="keywordflow">return</span> Token(Token::NEWLINE, <span class="stringliteral">"\n"</span>, currentLine, currentColumn);
|
368
|
+
<a name="l00343"></a>00343 } <span class="keywordflow">else</span> {
|
369
|
+
<a name="l00344"></a>00344 ignore();
|
370
|
+
<a name="l00345"></a>00345 <span class="keywordflow">break</span>;
|
371
|
+
<a name="l00346"></a>00346 }
|
372
|
+
<a name="l00347"></a>00347 <span class="keywordflow">case</span> <span class="charliteral">';'</span>:
|
373
|
+
<a name="l00348"></a>00348 <span class="comment">// Comment encountered: accept all characters until newline (exclusive).</span>
|
374
|
+
<a name="l00349"></a>00349 ignoreWhileNotNewLine();
|
375
|
+
<a name="l00350"></a>00350 <span class="keywordflow">break</span>;
|
376
|
+
<a name="l00351"></a>00351 <span class="keywordflow">case</span> <span class="charliteral">'='</span>:
|
377
|
+
<a name="l00352"></a>00352 <span class="keywordflow">return</span> tokenizeAssignment();
|
378
|
+
<a name="l00353"></a>00353 <span class="keywordflow">case</span> EOF:
|
379
|
+
<a name="l00354"></a>00354 <span class="keywordflow">return</span> Token(Token::END_OF_FILE, <span class="stringliteral">"<END_OF_FILE>"</span>, currentLine, currentColumn);
|
380
|
+
<a name="l00355"></a>00355 <span class="keywordflow">default</span>:
|
381
|
+
<a name="l00356"></a>00356 <span class="keywordflow">if</span> (isblank(upcomingChar)) {
|
382
|
+
<a name="l00357"></a>00357 ignore();
|
383
|
+
<a name="l00358"></a>00358 } <span class="keywordflow">else</span> {
|
384
|
+
<a name="l00359"></a>00359 <span class="keywordflow">switch</span>(lastAcceptedChar) {
|
385
|
+
<a name="l00360"></a>00360 <span class="keywordflow">case</span> <span class="charliteral">'\n'</span>:
|
386
|
+
<a name="l00361"></a>00361 <span class="keywordflow">return</span> tokenizeKey();
|
387
|
+
<a name="l00362"></a>00362 <span class="keywordflow">case</span> <span class="charliteral">'='</span>:
|
388
|
+
<a name="l00363"></a>00363 <span class="keywordflow">return</span> tokenizeValue();
|
389
|
+
<a name="l00364"></a>00364 <span class="keywordflow">default</span>:
|
390
|
+
<a name="l00365"></a>00365 <span class="keywordflow">return</span> tokenizeUnknown();
|
391
|
+
<a name="l00366"></a>00366 }
|
392
|
+
<a name="l00367"></a>00367 }
|
393
|
+
<a name="l00368"></a>00368 }
|
394
|
+
<a name="l00369"></a>00369 }
|
395
|
+
<a name="l00370"></a>00370
|
396
|
+
<a name="l00371"></a>00371 <span class="keywordflow">return</span> Token(Token::END_OF_FILE, <span class="stringliteral">"<END_OF_FILE>"</span>, currentLine, currentColumn);
|
397
|
+
<a name="l00372"></a>00372 }
|
398
|
+
<a name="l00373"></a>00373 };
|
399
|
+
<a name="l00374"></a>00374
|
400
|
+
<a name="l00375"></a>00375 <span class="keyword">typedef</span> shared_ptr<IniFileSection> IniFileSectionPtr;
|
401
|
+
<a name="l00376"></a>00376
|
402
|
+
<a name="l00377"></a>00377
|
403
|
+
<a name="l00378"></a>00378 <span class="keyword">class </span>IniFile {
|
404
|
+
<a name="l00379"></a>00379 <span class="keyword">protected</span>:
|
405
|
+
<a name="l00380"></a>00380 <span class="keyword">typedef</span> map<string, IniFileSectionPtr> SectionMap;
|
406
|
+
<a name="l00381"></a>00381 <span class="keywordtype">string</span> name;
|
407
|
+
<a name="l00382"></a>00382 SectionMap sections;
|
408
|
+
<a name="l00383"></a>00383
|
409
|
+
<a name="l00384"></a>00384 <span class="keyword">class </span>IniFileParser {
|
410
|
+
<a name="l00385"></a>00385 <span class="keyword">typedef</span> IniFileLexer::Token Token;
|
411
|
+
<a name="l00386"></a>00386
|
412
|
+
<a name="l00387"></a>00387 <span class="keyword">protected</span>:
|
413
|
+
<a name="l00388"></a>00388 IniFileLexer lexer;
|
414
|
+
<a name="l00389"></a>00389 IniFile *iniFile;
|
415
|
+
<a name="l00390"></a>00390
|
416
|
+
<a name="l00391"></a>00391 <span class="comment">// The Start Symbol.</span>
|
417
|
+
<a name="l00392"></a>00392 <span class="keywordtype">void</span> parseSections() {
|
418
|
+
<a name="l00393"></a>00393 <span class="keywordflow">while</span> ((lexer.peekToken())->kind == Token::SECTION_NAME) {
|
419
|
+
<a name="l00394"></a>00394 parseSection();
|
420
|
+
<a name="l00395"></a>00395 }
|
421
|
+
<a name="l00396"></a>00396 }
|
422
|
+
<a name="l00397"></a>00397
|
423
|
+
<a name="l00398"></a>00398 <span class="keywordtype">void</span> parseSection() {
|
424
|
+
<a name="l00399"></a>00399 Token token = acceptAndReturnif(Token::SECTION_NAME);
|
425
|
+
<a name="l00400"></a>00400 acceptIfEOL();
|
426
|
+
<a name="l00401"></a>00401
|
427
|
+
<a name="l00402"></a>00402 <span class="keywordtype">string</span> sectionName = token.value;
|
428
|
+
<a name="l00403"></a>00403 IniFileSection *section = <span class="keyword">new</span> IniFileSection(sectionName);
|
429
|
+
<a name="l00404"></a>00404 iniFile->addSection(section);
|
430
|
+
<a name="l00405"></a>00405
|
431
|
+
<a name="l00406"></a>00406 parseSectionBody(section);
|
432
|
+
<a name="l00407"></a>00407 }
|
433
|
+
<a name="l00408"></a>00408
|
434
|
+
<a name="l00409"></a>00409 <span class="keywordtype">void</span> parseSectionBody(IniFileSection *currentSection) {
|
435
|
+
<a name="l00410"></a>00410 <span class="keywordflow">while</span> ((lexer.peekToken())->kind == Token::IDENTIFIER) {
|
436
|
+
<a name="l00411"></a>00411 parseKeyValue(currentSection);
|
437
|
+
<a name="l00412"></a>00412 }
|
438
|
+
<a name="l00413"></a>00413 }
|
439
|
+
<a name="l00414"></a>00414
|
440
|
+
<a name="l00415"></a>00415 <span class="keywordtype">void</span> parseKeyValue(IniFileSection *currentSection) {
|
441
|
+
<a name="l00416"></a>00416 Token identifierToken = acceptAndReturnif (Token::IDENTIFIER);
|
442
|
+
<a name="l00417"></a>00417 acceptif (Token::ASSIGNMENT);
|
443
|
+
<a name="l00418"></a>00418 Token valueToken = acceptAndReturnif (Token::TEXT);
|
444
|
+
<a name="l00419"></a>00419 acceptIfEOL();
|
445
|
+
<a name="l00420"></a>00420 currentSection->set(identifierToken.value, valueToken.value);
|
446
|
+
<a name="l00421"></a>00421 }
|
447
|
+
<a name="l00422"></a>00422
|
448
|
+
<a name="l00423"></a>00423 <span class="keywordtype">void</span> acceptif (Token::Kind expectedKind) {
|
449
|
+
<a name="l00424"></a>00424 Token token = lexer.getToken();
|
450
|
+
<a name="l00425"></a>00425
|
451
|
+
<a name="l00426"></a>00426 <span class="keywordflow">if</span> (token.kind != expectedKind) {
|
452
|
+
<a name="l00427"></a>00427 <span class="keywordflow">throw</span> Token::ExpectanceException(expectedKind, token);
|
453
|
+
<a name="l00428"></a>00428 }
|
454
|
+
<a name="l00429"></a>00429 }
|
455
|
+
<a name="l00430"></a>00430
|
456
|
+
<a name="l00431"></a>00431 <span class="keywordtype">void</span> acceptIfEOL() {
|
457
|
+
<a name="l00432"></a>00432 Token token = lexer.getToken();
|
458
|
+
<a name="l00433"></a>00433
|
459
|
+
<a name="l00434"></a>00434 <span class="keywordflow">if</span> (token.kind != Token::NEWLINE && token.kind != Token::END_OF_FILE) {
|
460
|
+
<a name="l00435"></a>00435 <span class="keywordflow">throw</span> Token::ExpectanceException(Token::NEWLINE, token);
|
461
|
+
<a name="l00436"></a>00436 }
|
462
|
+
<a name="l00437"></a>00437 }
|
463
|
+
<a name="l00438"></a>00438
|
464
|
+
<a name="l00439"></a>00439 Token acceptAndReturnif (Token::Kind expectedKind) {
|
465
|
+
<a name="l00440"></a>00440 Token token = lexer.getToken();
|
466
|
+
<a name="l00441"></a>00441
|
467
|
+
<a name="l00442"></a>00442 <span class="keywordflow">if</span> (token.kind != expectedKind) {
|
468
|
+
<a name="l00443"></a>00443 <span class="keywordflow">throw</span> Token::ExpectanceException(expectedKind, token);
|
469
|
+
<a name="l00444"></a>00444 }
|
470
|
+
<a name="l00445"></a>00445
|
471
|
+
<a name="l00446"></a>00446 <span class="keywordflow">return</span> token;
|
472
|
+
<a name="l00447"></a>00447 }
|
473
|
+
<a name="l00448"></a>00448
|
474
|
+
<a name="l00449"></a>00449 <span class="keyword">public</span>:
|
475
|
+
<a name="l00450"></a>00450 IniFileParser(IniFile *iniFile) : lexer(iniFile->getName()), iniFile(iniFile) {
|
476
|
+
<a name="l00451"></a>00451 parseSections();
|
477
|
+
<a name="l00452"></a>00452 }
|
478
|
+
<a name="l00453"></a>00453 };
|
479
|
+
<a name="l00454"></a>00454
|
480
|
+
<a name="l00455"></a>00455 <span class="keyword">public</span>:
|
481
|
+
<a name="l00456"></a>00456 IniFile(<span class="keyword">const</span> <span class="keywordtype">string</span> &iniFileName)
|
482
|
+
<a name="l00457"></a>00457 : name(iniFileName)
|
483
|
+
<a name="l00458"></a>00458 {
|
484
|
+
<a name="l00459"></a>00459 IniFileParser parser(<span class="keyword">this</span>);
|
485
|
+
<a name="l00460"></a>00460 }
|
486
|
+
<a name="l00461"></a>00461
|
487
|
+
<a name="l00462"></a>00462 <span class="keywordtype">void</span> addSection(IniFileSection *section) {
|
488
|
+
<a name="l00463"></a>00463 sections.insert(make_pair(section->getSectionName(), IniFileSectionPtr(section)));
|
489
|
+
<a name="l00464"></a>00464 }
|
490
|
+
<a name="l00465"></a>00465
|
491
|
+
<a name="l00466"></a>00466 IniFileSectionPtr section(<span class="keyword">const</span> <span class="keywordtype">string</span> &sectionName) {
|
492
|
+
<a name="l00467"></a>00467 SectionMap::iterator it = sections.find(sectionName);
|
493
|
+
<a name="l00468"></a>00468 <span class="keywordflow">if</span> (it != sections.end()) {
|
494
|
+
<a name="l00469"></a>00469 <span class="keywordflow">return</span> it->second;
|
495
|
+
<a name="l00470"></a>00470 } <span class="keywordflow">else</span> {
|
496
|
+
<a name="l00471"></a>00471 <span class="keywordflow">return</span> IniFileSectionPtr();
|
497
|
+
<a name="l00472"></a>00472 }
|
498
|
+
<a name="l00473"></a>00473 }
|
499
|
+
<a name="l00474"></a>00474
|
500
|
+
<a name="l00475"></a>00475 <span class="keywordtype">bool</span> hasSection(<span class="keyword">const</span> <span class="keywordtype">string</span> &sectionName)<span class="keyword"> const </span>{
|
501
|
+
<a name="l00476"></a>00476 <span class="keywordflow">return</span> sections.find(sectionName) != sections.end();
|
502
|
+
<a name="l00477"></a>00477 }
|
503
|
+
<a name="l00478"></a>00478
|
504
|
+
<a name="l00479"></a>00479 <span class="keywordtype">string</span> getName()<span class="keyword"> const </span>{
|
505
|
+
<a name="l00480"></a>00480 <span class="keywordflow">return</span> name;
|
506
|
+
<a name="l00481"></a>00481 }
|
507
|
+
<a name="l00482"></a>00482
|
508
|
+
<a name="l00483"></a>00483 <span class="keywordtype">void</span> inspect()<span class="keyword"> const </span>{
|
509
|
+
<a name="l00484"></a>00484 SectionMap::const_iterator it = sections.begin();
|
510
|
+
<a name="l00485"></a>00485 <span class="keywordflow">while</span> (it != sections.end()) {
|
511
|
+
<a name="l00486"></a>00486 cout << <span class="stringliteral">"["</span> << (it->first) << <span class="stringliteral">"]"</span> << endl;
|
512
|
+
<a name="l00487"></a>00487 it->second->inspect();
|
513
|
+
<a name="l00488"></a>00488
|
514
|
+
<a name="l00489"></a>00489 it++;
|
515
|
+
<a name="l00490"></a>00490 }
|
516
|
+
<a name="l00491"></a>00491 }
|
517
|
+
<a name="l00492"></a>00492 };
|
518
|
+
<a name="l00493"></a>00493
|
519
|
+
<a name="l00494"></a>00494 } <span class="comment">// namespace Passenger</span>
|
520
|
+
<a name="l00495"></a>00495
|
521
|
+
<a name="l00496"></a>00496 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_INI_FILE_H_ */</span>
|
522
|
+
</pre></div></div>
|
523
|
+
<hr size="1"/><address style="text-align: right;"><small>Generated by
|
524
|
+
<a href="http://www.doxygen.org/index.html">
|
525
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
|
526
|
+
</body>
|
527
|
+
</html>
|