pion-5.0.6+dfsg.orig/0000755000372000001440000000000012314121442013731 5ustar robertouserspion-5.0.6+dfsg.orig/PionNetServices.vcxproj0000644000372000001440000002433712314121347020443 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} PionNetServices Utility Utility Utility Utility Utility Utility Utility Utility <_ProjectFileVersion>10.0.40219.1 Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* X64 Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs Remove all files from services\.libs if exist services\.libs del /Q services\.libs\*.* X64 Copy the plugin DLLs for the current configuration into services\.libs if not exist services\.libs md services\.libs copy services\$(Configuration)_$(Platform)\*.dll services\.libs X64 X64 {8c8a8e46-4588-4ce1-b624-89c36ea5209e} false {1cf012d8-a47c-4d2b-952d-d90d19795a07} false {09c3d3d7-7ce0-48d1-994f-eb534c07cf8b} false {70ca1fa9-ba9a-4ea4-9b7b-c747238991c1} false {9ee2433a-b460-45e0-8968-ec5ce8ef9875} false {12f95fe7-ace1-4281-86bf-4117ae2d633e} false pion-5.0.6+dfsg.orig/COPYING0000644000372000001440000000247212314121347014775 0ustar robertousersBoost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pion-5.0.6+dfsg.orig/pion.sln0000644000372000001440000005504312314121350015421 0ustar robertousers Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pion", "src\pion.vcxproj", "{61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piond", "utils\piond.vcxproj", "{2CF6432F-56EA-43AD-BCCB-C31A4DB75853}" ProjectSection(ProjectDependencies) = postProject {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} = {99D0C0C7-793B-49B1-A42E-CB563E5BB81F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "piontests", "tests\piontests.vcxproj", "{5AD25B42-E2C0-4D08-985B-E8F115D19D56}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PionNetServices", "PionNetServices.vcxproj", "{99D0C0C7-793B-49B1-A42E-CB563E5BB81F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AllowNothingService", "services\AllowNothingService.vcxproj", "{8C8A8E46-4588-4CE1-B624-89C36EA5209E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CookieService", "services\CookieService.vcxproj", "{1CF012D8-A47C-4D2B-952D-D90D19795A07}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EchoService", "services\EchoService.vcxproj", "{09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileService", "services\FileService.vcxproj", "{70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloService", "services\HelloService.vcxproj", "{9EE2433A-B460-45E0-8968-EC5CE8EF9875}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LogService", "services\LogService.vcxproj", "{12F95FE7-ACE1-4281-86BF-4117AE2D633E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasCreateAndDestroy", "tests\plugins\hasCreateAndDestroy.vcxproj", "{CD11B3D6-1296-45F4-B924-034CC103D626}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasCreateButNoDestroy", "tests\plugins\hasCreateButNoDestroy.vcxproj", "{2DEAB99F-2617-4235-8EF7-653F36EFAC83}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hasNoCreate", "tests\plugins\hasNoCreate.vcxproj", "{33DEAB53-40E1-42FF-9C17-7A9956102052}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPluigins", "tests\TestPlugins.vcxproj", "{7080E9F1-318F-4152-9E36-9F427F5CE9B7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_DLL_full|Win32 = Debug_DLL_full|Win32 Debug_DLL_full|x64 = Debug_DLL_full|x64 Debug_static|Win32 = Debug_static|Win32 Debug_static|x64 = Debug_static|x64 Release_DLL_full|Win32 = Release_DLL_full|Win32 Release_DLL_full|x64 = Release_DLL_full|x64 Release_static|Win32 = Release_static|Win32 Release_static|x64 = Release_static|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|Win32.Build.0 = Debug_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|x64.ActiveCfg = Debug_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Debug_static|x64.Build.0 = Debug_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|Win32.ActiveCfg = Release_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|Win32.Build.0 = Release_static|Win32 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|x64.ActiveCfg = Release_static|x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62}.Release_static|x64.Build.0 = Release_static|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|Win32.Build.0 = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|x64.ActiveCfg = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Debug_static|x64.Build.0 = Debug_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|Win32.ActiveCfg = Release_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|Win32.Build.0 = Release_static|Win32 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|x64.ActiveCfg = Release_static|x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853}.Release_static|x64.Build.0 = Release_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|Win32.Build.0 = Debug_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|x64.ActiveCfg = Debug_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Debug_static|x64.Build.0 = Debug_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|Win32.ActiveCfg = Release_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|Win32.Build.0 = Release_static|Win32 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|x64.ActiveCfg = Release_static|x64 {5AD25B42-E2C0-4D08-985B-E8F115D19D56}.Release_static|x64.Build.0 = Release_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|Win32.Build.0 = Debug_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|x64.ActiveCfg = Debug_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Debug_static|x64.Build.0 = Debug_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|Win32.ActiveCfg = Release_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|Win32.Build.0 = Release_static|Win32 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|x64.ActiveCfg = Release_static|x64 {99D0C0C7-793B-49B1-A42E-CB563E5BB81F}.Release_static|x64.Build.0 = Release_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|Win32.Build.0 = Debug_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|x64.ActiveCfg = Debug_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Debug_static|x64.Build.0 = Debug_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|Win32.ActiveCfg = Release_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|Win32.Build.0 = Release_static|Win32 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|x64.ActiveCfg = Release_static|x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E}.Release_static|x64.Build.0 = Release_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|Win32.Build.0 = Debug_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|x64.ActiveCfg = Debug_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Debug_static|x64.Build.0 = Debug_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|Win32.ActiveCfg = Release_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|Win32.Build.0 = Release_static|Win32 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|x64.ActiveCfg = Release_static|x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07}.Release_static|x64.Build.0 = Release_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|Win32.Build.0 = Debug_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|x64.ActiveCfg = Debug_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Debug_static|x64.Build.0 = Debug_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|Win32.ActiveCfg = Release_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|Win32.Build.0 = Release_static|Win32 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|x64.ActiveCfg = Release_static|x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B}.Release_static|x64.Build.0 = Release_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|Win32.Build.0 = Debug_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|x64.ActiveCfg = Debug_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Debug_static|x64.Build.0 = Debug_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|Win32.ActiveCfg = Release_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|Win32.Build.0 = Release_static|Win32 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|x64.ActiveCfg = Release_static|x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1}.Release_static|x64.Build.0 = Release_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|Win32.Build.0 = Debug_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|x64.ActiveCfg = Debug_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Debug_static|x64.Build.0 = Debug_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|Win32.ActiveCfg = Release_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|Win32.Build.0 = Release_static|Win32 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|x64.ActiveCfg = Release_static|x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875}.Release_static|x64.Build.0 = Release_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|Win32.Build.0 = Debug_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|x64.ActiveCfg = Debug_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Debug_static|x64.Build.0 = Debug_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|Win32.ActiveCfg = Release_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|Win32.Build.0 = Release_static|Win32 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|x64.ActiveCfg = Release_static|x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E}.Release_static|x64.Build.0 = Release_static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Debug_static|x64.Build.0 = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_Full|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|Win32.Build.0 = Release_DLL_Full|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|x64.ActiveCfg = Release_DLL_Full|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_DLL_full|x64.Build.0 = Release_DLL_Full|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|Win32.Build.0 = Release_Static|Win32 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|x64.ActiveCfg = Release_Static|x64 {CD11B3D6-1296-45F4-B924-034CC103D626}.Release_static|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Debug_static|x64.Build.0 = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|Win32.Build.0 = Release_Static|Win32 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|x64.ActiveCfg = Release_Static|x64 {2DEAB99F-2617-4235-8EF7-653F36EFAC83}.Release_static|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|Win32.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_DLL_full|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|Win32.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Debug_static|x64.Build.0 = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|Win32.ActiveCfg = Release_Static|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|Win32.Build.0 = Release_Static|Win32 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|x64.ActiveCfg = Release_Static|x64 {33DEAB53-40E1-42FF-9C17-7A9956102052}.Release_static|x64.Build.0 = Release_Static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|Win32.ActiveCfg = Debug_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|Win32.Build.0 = Debug_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|x64.ActiveCfg = Debug_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_DLL_full|x64.Build.0 = Debug_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|Win32.ActiveCfg = Debug_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|Win32.Build.0 = Debug_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|x64.ActiveCfg = Debug_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Debug_static|x64.Build.0 = Debug_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|Win32.ActiveCfg = Release_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|Win32.Build.0 = Release_DLL_full|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|x64.ActiveCfg = Release_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_DLL_full|x64.Build.0 = Release_DLL_full|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|Win32.ActiveCfg = Release_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|Win32.Build.0 = Release_static|Win32 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|x64.ActiveCfg = Release_static|x64 {7080E9F1-318F-4152-9E36-9F427F5CE9B7}.Release_static|x64.Build.0 = Release_static|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal pion-5.0.6+dfsg.orig/configure.ac0000644000372000001440000000256112314121350016221 0ustar robertousers# ------------------------------------------------ # Pion Network Library autoconf configuration file # ------------------------------------------------ # Set pion version information AC_INIT([pion], [5.0.6], [pion-users@lists.sourceforge.net]) # Initialize some other things AC_PREREQ([2.59]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([m4]) AC_CONFIG_SRCDIR(src/algorithm.cpp) # package and version args are now taken from AC_INIT() AM_INIT_AUTOMAKE([foreign]) # Use "silent mode" for less verbose build commands in automake 1.11+ m4_ifdef( [AM_SILENT_RULES], [AM_SILENT_RULES([yes])] ) # Needed to set per-target compilation flags AM_PROG_CC_C_O # Setup libtool AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL # Setup doxygen support DX_DOXYGEN_FEATURE(ON) DX_HTML_FEATURE(ON) DX_INIT_DOXYGEN(pion, doc/Doxyfile, doc) # Define CXXFLAGS before AC_PROG_CXX to suppress the default autoconf # compiler options CFLAGS="$CFLAGS -DPION" CXXFLAGS="$CXXFLAGS -DPION" # Include pion-config.inc m4_include([build/pion-setup.inc]) m4_include([build/pion-boost.inc]) m4_include([build/pion-config.inc]) # Output Makefiles AC_OUTPUT(pion.pc Makefile include/Makefile include/pion/Makefile include/pion/tcp/Makefile include/pion/http/Makefile include/pion/test/Makefile include/pion/spdy/Makefile src/Makefile services/Makefile utils/Makefile tests/Makefile tests/plugins/Makefile) pion-5.0.6+dfsg.orig/TODO0000644000372000001440000000004712314121350014420 0ustar robertousersSee https://github.com/cloudmeter/pion pion-5.0.6+dfsg.orig/aclocal.m40000644000372000001440000011027712314121373015604 0ustar robertousers# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, [m4_warning([this file was generated for autoconf 2.63. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([build/ax_boost_base.m4]) m4_include([build/ax_compiler_vendor.m4]) m4_include([build/ax_prog_doxygen.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) pion-5.0.6+dfsg.orig/services/0000755000372000001440000000000012314121443015555 5ustar robertouserspion-5.0.6+dfsg.orig/services/EchoService.vcxproj0000644000372000001440000003313112314121350021367 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {09C3D3D7-7CE0-48D1-994F-EB534C07CF8B} EchoService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 ECHOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/CookieService.cpp0000644000372000001440000001177012314121350021016 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "CookieService.hpp" #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // CookieService member functions /// handles requests for CookieService void CookieService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string HEADER_HTML = "\n\nCookie Service\n" "\n\n\n

Cookie Service

\n"; static const std::string FOOTER_HTML = "\n\n\n"; // Set Content-type for HTML and write the header http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_HTML); writer->write_no_copy(HEADER_HTML); // Check if we have an action to perform if (http_request_ptr->has_query("action")) { if (http_request_ptr->get_query("action") == "Add Cookie") { // add a new cookie const std::string cookie_name(http_request_ptr->get_query("cookie_name")); const std::string cookie_value(http_request_ptr->get_query("cookie_value")); if (cookie_name.empty() || cookie_value.empty()) { writer << "\n

[Error: You must specify a name and value to add a cookie]

\n\n"; } else { writer->get_response().set_cookie(cookie_name, cookie_value); writer << "\n

[Added cookie " << cookie_name << '=' << cookie_value << "]

\n\n"; } } else if (http_request_ptr->get_query("action") == "delete") { const std::string cookie_name(http_request_ptr->get_query("cookie_name")); if (cookie_name.empty()) { writer << "\n

[Error: You must specify a name to delete a cookie]

\n\n"; } else { writer->get_response().delete_cookie(cookie_name); writer << "\n

[Deleted cookie " << cookie_name << "]

\n\n"; } } else { writer << "\n

[Error: Unrecognized action]

\n\n"; } } // display cookie headers in request if (http_request_ptr->has_header(http::types::HEADER_COOKIE)) { writer << "\n

Cookie Headers

\n
    \n"; std::pair header_pair = http_request_ptr->get_headers().equal_range(http::types::HEADER_COOKIE); for (ihash_multimap::const_iterator header_iterator = header_pair.first; header_iterator != http_request_ptr->get_headers().end() && header_iterator != header_pair.second; ++header_iterator) { writer << "
  • Cookie: " << header_iterator->second << "\n"; } writer << "
\n\n"; } else { writer << "\n

No Cookie Headers

\n\n"; } // display existing cookies ihash_multimap& cookie_params = http_request_ptr->get_cookies(); if (! cookie_params.empty()) { writer << "\n

Cookie Variables

\n\n\n"; } else { writer << "\n

No Cookie Variables

\n\n"; } // display form to add a cookie writer << "\n

Add Cookie

\n" "

get_resource() << "\" method=\"POST\">\n" "Name:
\n" "Value:
\n" "

\n" "
\n\n"; // write the footer writer->write_no_copy(FOOTER_HTML); // send the writer writer->send(); } } // end namespace plugins } // end namespace pion /// creates new CookieService objects extern "C" PION_PLUGIN pion::plugins::CookieService *pion_create_CookieService(void) { return new pion::plugins::CookieService(); } /// destroys CookieService objects extern "C" PION_PLUGIN void pion_destroy_CookieService(pion::plugins::CookieService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/HelloService.hpp0000644000372000001440000000200012314121350020637 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HELLOSERVICE_HEADER__ #define __PION_HELLOSERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// HelloService: web service that responds with "Hello World" /// class HelloService : public pion::http::plugin_service { public: HelloService(void) {} virtual ~HelloService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/services/Makefile.in0000644000372000001440000007574212314121400017632 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = services DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_pluginsdir)" LTLIBRARIES = $(pion_plugins_LTLIBRARIES) am_AllowNothingService_la_OBJECTS = \ AllowNothingService_la-AllowNothingService.lo AllowNothingService_la_OBJECTS = $(am_AllowNothingService_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent AllowNothingService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) \ $(AllowNothingService_la_LDFLAGS) $(LDFLAGS) -o $@ am_CookieService_la_OBJECTS = CookieService_la-CookieService.lo CookieService_la_OBJECTS = $(am_CookieService_la_OBJECTS) CookieService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(CookieService_la_CXXFLAGS) $(CXXFLAGS) \ $(CookieService_la_LDFLAGS) $(LDFLAGS) -o $@ am_EchoService_la_OBJECTS = EchoService_la-EchoService.lo EchoService_la_OBJECTS = $(am_EchoService_la_OBJECTS) EchoService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(EchoService_la_CXXFLAGS) $(CXXFLAGS) \ $(EchoService_la_LDFLAGS) $(LDFLAGS) -o $@ am_FileService_la_OBJECTS = FileService.lo FileService_la_OBJECTS = $(am_FileService_la_OBJECTS) FileService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(FileService_la_LDFLAGS) \ $(LDFLAGS) -o $@ am_HelloService_la_OBJECTS = HelloService_la-HelloService.lo HelloService_la_OBJECTS = $(am_HelloService_la_OBJECTS) HelloService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(HelloService_la_CXXFLAGS) $(CXXFLAGS) \ $(HelloService_la_LDFLAGS) $(LDFLAGS) -o $@ am_LogService_la_OBJECTS = LogService_la-LogService.lo LogService_la_OBJECTS = $(am_LogService_la_OBJECTS) LogService_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(LogService_la_CXXFLAGS) $(CXXFLAGS) $(LogService_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(AllowNothingService_la_SOURCES) \ $(CookieService_la_SOURCES) $(EchoService_la_SOURCES) \ $(FileService_la_SOURCES) $(HelloService_la_SOURCES) \ $(LogService_la_SOURCES) DIST_SOURCES = $(AllowNothingService_la_SOURCES) \ $(CookieService_la_SOURCES) $(EchoService_la_SOURCES) \ $(FileService_la_SOURCES) $(HelloService_la_SOURCES) \ $(LogService_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = HelloService.la EchoService.la \ CookieService.la LogService.la FileService.la AllowNothingService.la HelloService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) HelloService_la_SOURCES = HelloService.hpp HelloService.cpp HelloService_la_LDFLAGS = -no-undefined -module -avoid-version HelloService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ HelloService_la_DEPENDENCIES = ../src/libpion.la EchoService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) EchoService_la_SOURCES = EchoService.hpp EchoService.cpp EchoService_la_LDFLAGS = -no-undefined -module -avoid-version EchoService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ EchoService_la_DEPENDENCIES = ../src/libpion.la CookieService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) CookieService_la_SOURCES = CookieService.hpp CookieService.cpp CookieService_la_LDFLAGS = -no-undefined -module -avoid-version CookieService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ CookieService_la_DEPENDENCIES = ../src/libpion.la LogService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) LogService_la_SOURCES = LogService.hpp LogService.cpp LogService_la_LDFLAGS = -no-undefined -module -avoid-version LogService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ LogService_la_DEPENDENCIES = ../src/libpion.la # Build both dynamic and static library for FileService #FileService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) FileService_la_SOURCES = FileService.hpp FileService.cpp FileService_la_LDFLAGS = -no-undefined -module -avoid-version FileService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ FileService_la_DEPENDENCIES = ../src/libpion.la AllowNothingService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) AllowNothingService_la_SOURCES = AllowNothingService.hpp AllowNothingService.cpp AllowNothingService_la_LDFLAGS = -no-undefined -module -avoid-version AllowNothingService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ AllowNothingService_la_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign services/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign services/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pion_pluginsLTLIBRARIES: $(pion_plugins_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pion_pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pion_pluginsdir)" @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pion_pluginsdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pion_pluginsdir)"; \ } uninstall-pion_pluginsLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pion_plugins_LTLIBRARIES)'; test -n "$(pion_pluginsdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pion_pluginsdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pion_pluginsdir)/$$f"; \ done clean-pion_pluginsLTLIBRARIES: -test -z "$(pion_plugins_LTLIBRARIES)" || rm -f $(pion_plugins_LTLIBRARIES) @list='$(pion_plugins_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done AllowNothingService.la: $(AllowNothingService_la_OBJECTS) $(AllowNothingService_la_DEPENDENCIES) $(AM_V_CXXLD)$(AllowNothingService_la_LINK) -rpath $(pion_pluginsdir) $(AllowNothingService_la_OBJECTS) $(AllowNothingService_la_LIBADD) $(LIBS) CookieService.la: $(CookieService_la_OBJECTS) $(CookieService_la_DEPENDENCIES) $(AM_V_CXXLD)$(CookieService_la_LINK) -rpath $(pion_pluginsdir) $(CookieService_la_OBJECTS) $(CookieService_la_LIBADD) $(LIBS) EchoService.la: $(EchoService_la_OBJECTS) $(EchoService_la_DEPENDENCIES) $(AM_V_CXXLD)$(EchoService_la_LINK) -rpath $(pion_pluginsdir) $(EchoService_la_OBJECTS) $(EchoService_la_LIBADD) $(LIBS) FileService.la: $(FileService_la_OBJECTS) $(FileService_la_DEPENDENCIES) $(AM_V_CXXLD)$(FileService_la_LINK) -rpath $(pion_pluginsdir) $(FileService_la_OBJECTS) $(FileService_la_LIBADD) $(LIBS) HelloService.la: $(HelloService_la_OBJECTS) $(HelloService_la_DEPENDENCIES) $(AM_V_CXXLD)$(HelloService_la_LINK) -rpath $(pion_pluginsdir) $(HelloService_la_OBJECTS) $(HelloService_la_LIBADD) $(LIBS) LogService.la: $(LogService_la_OBJECTS) $(LogService_la_DEPENDENCIES) $(AM_V_CXXLD)$(LogService_la_LINK) -rpath $(pion_pluginsdir) $(LogService_la_OBJECTS) $(LogService_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllowNothingService_la-AllowNothingService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieService_la-CookieService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EchoService_la-EchoService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelloService_la-HelloService.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogService_la-LogService.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< AllowNothingService_la-AllowNothingService.lo: AllowNothingService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) -MT AllowNothingService_la-AllowNothingService.lo -MD -MP -MF $(DEPDIR)/AllowNothingService_la-AllowNothingService.Tpo -c -o AllowNothingService_la-AllowNothingService.lo `test -f 'AllowNothingService.cpp' || echo '$(srcdir)/'`AllowNothingService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/AllowNothingService_la-AllowNothingService.Tpo $(DEPDIR)/AllowNothingService_la-AllowNothingService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='AllowNothingService.cpp' object='AllowNothingService_la-AllowNothingService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AllowNothingService_la_CXXFLAGS) $(CXXFLAGS) -c -o AllowNothingService_la-AllowNothingService.lo `test -f 'AllowNothingService.cpp' || echo '$(srcdir)/'`AllowNothingService.cpp CookieService_la-CookieService.lo: CookieService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CookieService_la_CXXFLAGS) $(CXXFLAGS) -MT CookieService_la-CookieService.lo -MD -MP -MF $(DEPDIR)/CookieService_la-CookieService.Tpo -c -o CookieService_la-CookieService.lo `test -f 'CookieService.cpp' || echo '$(srcdir)/'`CookieService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/CookieService_la-CookieService.Tpo $(DEPDIR)/CookieService_la-CookieService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CookieService.cpp' object='CookieService_la-CookieService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CookieService_la_CXXFLAGS) $(CXXFLAGS) -c -o CookieService_la-CookieService.lo `test -f 'CookieService.cpp' || echo '$(srcdir)/'`CookieService.cpp EchoService_la-EchoService.lo: EchoService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(EchoService_la_CXXFLAGS) $(CXXFLAGS) -MT EchoService_la-EchoService.lo -MD -MP -MF $(DEPDIR)/EchoService_la-EchoService.Tpo -c -o EchoService_la-EchoService.lo `test -f 'EchoService.cpp' || echo '$(srcdir)/'`EchoService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/EchoService_la-EchoService.Tpo $(DEPDIR)/EchoService_la-EchoService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='EchoService.cpp' object='EchoService_la-EchoService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(EchoService_la_CXXFLAGS) $(CXXFLAGS) -c -o EchoService_la-EchoService.lo `test -f 'EchoService.cpp' || echo '$(srcdir)/'`EchoService.cpp HelloService_la-HelloService.lo: HelloService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(HelloService_la_CXXFLAGS) $(CXXFLAGS) -MT HelloService_la-HelloService.lo -MD -MP -MF $(DEPDIR)/HelloService_la-HelloService.Tpo -c -o HelloService_la-HelloService.lo `test -f 'HelloService.cpp' || echo '$(srcdir)/'`HelloService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/HelloService_la-HelloService.Tpo $(DEPDIR)/HelloService_la-HelloService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='HelloService.cpp' object='HelloService_la-HelloService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(HelloService_la_CXXFLAGS) $(CXXFLAGS) -c -o HelloService_la-HelloService.lo `test -f 'HelloService.cpp' || echo '$(srcdir)/'`HelloService.cpp LogService_la-LogService.lo: LogService.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(LogService_la_CXXFLAGS) $(CXXFLAGS) -MT LogService_la-LogService.lo -MD -MP -MF $(DEPDIR)/LogService_la-LogService.Tpo -c -o LogService_la-LogService.lo `test -f 'LogService.cpp' || echo '$(srcdir)/'`LogService.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/LogService_la-LogService.Tpo $(DEPDIR)/LogService_la-LogService.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='LogService.cpp' object='LogService_la-LogService.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(LogService_la_CXXFLAGS) $(CXXFLAGS) -c -o LogService_la-LogService.lo `test -f 'LogService.cpp' || echo '$(srcdir)/'`LogService.cpp mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pion_pluginsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-pion_pluginsLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_pluginsLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_pluginsLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pion_pluginsLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pion_pluginsLTLIBRARIES \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_pluginsLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/services/LogService.vcxproj.filters0000644000372000001440000000203012314121350022673 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/FileService.cpp0000644000372000001440000012700712314121350020465 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include "FileService.hpp" #include #include #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // static members of FileService const std::string FileService::DEFAULT_MIME_TYPE("application/octet-stream"); const unsigned int FileService::DEFAULT_CACHE_SETTING = 1; const unsigned int FileService::DEFAULT_SCAN_SETTING = 0; const unsigned long FileService::DEFAULT_MAX_CACHE_SIZE = 0; /* 0=disabled */ const unsigned long FileService::DEFAULT_MAX_CHUNK_SIZE = 0; /* 0=disabled */ boost::once_flag FileService::m_mime_types_init_flag = BOOST_ONCE_INIT; FileService::MIMETypeMap *FileService::m_mime_types_ptr = NULL; // FileService member functions FileService::FileService(void) : m_logger(PION_GET_LOGGER("pion.FileService")), m_cache_setting(DEFAULT_CACHE_SETTING), m_scan_setting(DEFAULT_SCAN_SETTING), m_max_cache_size(DEFAULT_MAX_CACHE_SIZE), m_max_chunk_size(DEFAULT_MAX_CHUNK_SIZE), m_writable(false) {} void FileService::set_option(const std::string& name, const std::string& value) { if (name == "directory") { m_directory = value; m_directory.normalize(); plugin::check_cygwin_path(m_directory, value); // make sure that the directory exists if (! boost::filesystem::exists(m_directory) || ! boost::filesystem::is_directory(m_directory)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string dir_name = m_directory.string(); #else const std::string dir_name = m_directory.directory_string(); #endif BOOST_THROW_EXCEPTION( error::directory_not_found() << error::errinfo_dir_name(dir_name) ); } } else if (name == "file") { m_file = value; plugin::check_cygwin_path(m_file, value); // make sure that the directory exists if (! boost::filesystem::exists(m_file) || boost::filesystem::is_directory(m_file)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string file_name = m_file.string(); #else const std::string file_name = m_file.file_string(); #endif BOOST_THROW_EXCEPTION( error::file_not_found() << error::errinfo_file_name(file_name) ); } } else if (name == "cache") { if (value == "0") { m_cache_setting = 0; } else if (value == "1") { m_cache_setting = 1; } else if (value == "2") { m_cache_setting = 2; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else if (name == "scan") { if (value == "0") { m_scan_setting = 0; } else if (value == "1") { m_scan_setting = 1; } else if (value == "2") { m_scan_setting = 2; } else if (value == "3") { m_scan_setting = 3; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else if (name == "max_chunk_size") { m_max_chunk_size = boost::lexical_cast(value); } else if (name == "writable") { if (value == "true") { m_writable = true; } else if (value == "false") { m_writable = false; } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } else { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } } void FileService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // get the relative resource path for the request const std::string relative_path(get_relative_resource(http_request_ptr->get_resource())); // determine the path of the file being requested boost::filesystem::path file_path; if (relative_path.empty()) { // request matches resource exactly if (m_file.empty()) { // no file is specified, either in the request or in the options PION_LOG_WARN(m_logger, "No file option defined (" << get_resource() << ")"); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } else { file_path = m_file; } } else { // request does not match resource if (m_directory.empty()) { // no directory is specified for the relative file PION_LOG_WARN(m_logger, "No directory option defined (" << get_resource() << "): " << relative_path); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } else { file_path = m_directory / relative_path; } } // make sure that the requested file is within the configured directory file_path.normalize(); # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 std::string file_string = file_path.string(); if (file_string.find(m_directory.string()) != 0) { #else std::string file_string = file_path.file_string(); if (file_string.find(m_directory.directory_string()) != 0) { #endif PION_LOG_WARN(m_logger, "Request for file outside of directory (" << get_resource() << "): " << relative_path); static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

The requested URL "; static const std::string FORBIDDEN_HTML_FINISH = " is not in the configured directory.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_FINISH); } writer->send(); return; } // requests specifying directories are not allowed if (boost::filesystem::is_directory(file_path)) { PION_LOG_WARN(m_logger, "Request for directory (" << get_resource() << "): " << relative_path); static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

The requested URL "; static const std::string FORBIDDEN_HTML_FINISH = " is a directory.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_FINISH); } writer->send(); return; } if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_GET || http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { // the type of response we will send enum ResponseType { RESPONSE_UNDEFINED, // initial state until we know how to respond RESPONSE_OK, // normal response that includes the file's content RESPONSE_HEAD_OK, // response to HEAD request (would send file's content) RESPONSE_NOT_FOUND, // Not Found (404) RESPONSE_NOT_MODIFIED // Not Modified (304) response to If-Modified-Since } response_type = RESPONSE_UNDEFINED; // used to hold our response information DiskFile response_file; // get the If-Modified-Since request header const std::string if_modified_since(http_request_ptr->get_header(http::types::HEADER_IF_MODIFIED_SINCE)); // check the cache for a corresponding entry (if enabled) // note that m_cache_setting may equal 0 if m_scan_setting == 1 if (m_cache_setting > 0 || m_scan_setting > 0) { // search for a matching cache entry boost::mutex::scoped_lock cache_lock(m_cache_mutex); CacheMap::iterator cache_itr = m_cache_map.find(relative_path); if (cache_itr == m_cache_map.end()) { // no existing cache entries found if (m_scan_setting == 1 || m_scan_setting == 3) { // do not allow files to be added; // all requests must correspond with existing cache entries // since no match was found, just return file not found PION_LOG_WARN(m_logger, "Request for unknown file (" << get_resource() << "): " << relative_path); response_type = RESPONSE_NOT_FOUND; } else { PION_LOG_DEBUG(m_logger, "No cache entry for request (" << get_resource() << "): " << relative_path); } } else { // found an existing cache entry PION_LOG_DEBUG(m_logger, "Found cache entry for request (" << get_resource() << "): " << relative_path); if (m_cache_setting == 0) { // cache is disabled // copy & re-use file_path and mime_type response_file.setFilePath(cache_itr->second.getFilePath()); response_file.setMimeType(cache_itr->second.getMimeType()); // get the file_size and last_modified timestamp response_file.update(); // just compare strings for simplicity (parsing this date format sucks!) if (response_file.getLastModifiedString() == if_modified_since) { // no need to read the file; the modified times match! response_type = RESPONSE_NOT_MODIFIED; } else { if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; PION_LOG_DEBUG(m_logger, "Cache disabled, reading file (" << get_resource() << "): " << relative_path); } } } else { // cache is enabled // true if the entry was updated (used for log message) bool cache_was_updated = false; if (cache_itr->second.getLastModified() == 0) { // cache file for the first time cache_was_updated = true; cache_itr->second.update(); if (m_max_cache_size==0 || cache_itr->second.getFileSize() <= m_max_cache_size) { // read the file (may throw exception) cache_itr->second.read(); } else { cache_itr->second.resetFileContent(); } } else if (m_cache_setting == 1) { // check if file has been updated (may throw exception) cache_was_updated = cache_itr->second.checkUpdated(); } // else cache_setting == 2 (use existing values) // get the response type if (cache_itr->second.getLastModifiedString() == if_modified_since) { response_type = RESPONSE_NOT_MODIFIED; } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; } // copy cache contents so that we can release the mutex response_file = cache_itr->second; // check if max size has been exceeded if (cache_was_updated && m_max_cache_size > 0 && cache_itr->second.getFileSize() > m_max_cache_size) { cache_itr->second.resetFileContent(); } PION_LOG_DEBUG(m_logger, (cache_was_updated ? "Updated" : "Using") << " cache entry for request (" << get_resource() << "): " << relative_path); } } } if (response_type == RESPONSE_UNDEFINED) { // make sure that the file exists if (! boost::filesystem::exists(file_path)) { PION_LOG_WARN(m_logger, "File not found (" << get_resource() << "): " << relative_path); sendNotFoundResponse(http_request_ptr, tcp_conn); return; } response_file.setFilePath(file_path); PION_LOG_DEBUG(m_logger, "Found file for request (" << get_resource() << "): " << relative_path); // determine the MIME type # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 response_file.setMimeType(findMIMEType( response_file.getFilePath().filename().string())); #else response_file.setMimeType(findMIMEType( response_file.getFilePath().leaf() )); #endif // get the file_size and last_modified timestamp response_file.update(); // just compare strings for simplicity (parsing this date format sucks!) if (response_file.getLastModifiedString() == if_modified_since) { // no need to read the file; the modified times match! response_type = RESPONSE_NOT_MODIFIED; } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_HEAD) { response_type = RESPONSE_HEAD_OK; } else { response_type = RESPONSE_OK; if (m_cache_setting != 0) { if (m_max_cache_size==0 || response_file.getFileSize() <= m_max_cache_size) { // read the file (may throw exception) response_file.read(); } // add new entry to the cache PION_LOG_DEBUG(m_logger, "Adding cache entry for request (" << get_resource() << "): " << relative_path); boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_cache_map.insert( std::make_pair(relative_path, response_file) ); } } } if (response_type == RESPONSE_OK) { // use DiskFileSender to send a file DiskFileSenderPtr sender_ptr(DiskFileSender::create(response_file, http_request_ptr, tcp_conn, m_max_chunk_size)); sender_ptr->send(); } else if (response_type == RESPONSE_NOT_FOUND) { sendNotFoundResponse(http_request_ptr, tcp_conn); } else { // sending headers only -> use our own response object // prepare a response and set the Content-Type http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(response_file.getMimeType()); // set Last-Modified header to enable client-side caching writer->get_response().add_header(http::types::HEADER_LAST_MODIFIED, response_file.getLastModifiedString()); switch(response_type) { case RESPONSE_UNDEFINED: case RESPONSE_NOT_FOUND: case RESPONSE_OK: // this should never happen BOOST_ASSERT(false); break; case RESPONSE_NOT_MODIFIED: // set "Not Modified" response writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_MODIFIED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_MODIFIED); break; case RESPONSE_HEAD_OK: // set "OK" response (not really necessary since this is the default) writer->get_response().set_status_code(http::types::RESPONSE_CODE_OK); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_OK); break; } // send the response writer->send(); } } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST || http_request_ptr->get_method() == http::types::REQUEST_METHOD_PUT || http_request_ptr->get_method() == http::types::REQUEST_METHOD_DELETE) { // If not writable, then send 405 (Method Not Allowed) response for POST, PUT or DELETE requests. if (!m_writable) { static const std::string NOT_ALLOWED_HTML_START = "\n" "405 Method Not Allowed\n" "\n" "

Not Allowed

\n" "

The requested method "; static const std::string NOT_ALLOWED_HTML_FINISH = " is not allowed on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); writer->write_no_copy(NOT_ALLOWED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_ALLOWED_HTML_FINISH); writer->get_response().add_header("Allow", "GET, HEAD"); writer->send(); } else { http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST || http_request_ptr->get_method() == http::types::REQUEST_METHOD_PUT) { if (boost::filesystem::exists(file_path)) { writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); } else { // The file doesn't exist yet, so it will be created below, unless the // directory of the requested file also doesn't exist. if (!boost::filesystem::exists(file_path.branch_path())) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The directory of the requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); writer->send(); return; } static const std::string CREATED_HTML_START = "\n" "201 Created\n" "\n" "

Created

\n" "

"; static const std::string CREATED_HTML_FINISH = "

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_CREATED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_CREATED); writer->get_response().add_header(http::types::HEADER_LOCATION, http_request_ptr->get_resource()); writer->write_no_copy(CREATED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(CREATED_HTML_FINISH); } std::ios_base::openmode mode = http_request_ptr->get_method() == http::types::REQUEST_METHOD_POST? std::ios::app : std::ios::out; boost::filesystem::ofstream file_stream(file_path, mode); file_stream.write(http_request_ptr->get_content(), http_request_ptr->get_content_length()); file_stream.close(); if (!boost::filesystem::exists(file_path)) { static const std::string PUT_FAILED_HTML_START = "\n" "500 Server Error\n" "\n" "

Server Error

\n" "

Error writing to "; static const std::string PUT_FAILED_HTML_FINISH = ".

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(PUT_FAILED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(PUT_FAILED_HTML_FINISH); } writer->send(); } else if (http_request_ptr->get_method() == http::types::REQUEST_METHOD_DELETE) { if (!boost::filesystem::exists(file_path)) { sendNotFoundResponse(http_request_ptr, tcp_conn); } else { try { boost::filesystem::remove(file_path); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); writer->send(); } catch (std::exception& e) { static const std::string DELETE_FAILED_HTML_START = "\n" "500 Server Error\n" "\n" "

Server Error

\n" "

Could not delete "; static const std::string DELETE_FAILED_HTML_FINISH = ".

\n" "\n"; writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(DELETE_FAILED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()) << ".

" << boost::diagnostic_information(e); writer->write_no_copy(DELETE_FAILED_HTML_FINISH); writer->send(); } } } else { // This should never be reached. writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->send(); } } } // Any method not handled above is unimplemented. else { static const std::string NOT_IMPLEMENTED_HTML_START = "\n" "501 Not Implemented\n" "\n" "

Not Implemented

\n" "

The requested method "; static const std::string NOT_IMPLEMENTED_HTML_FINISH = " is not implemented on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_IMPLEMENTED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_IMPLEMENTED); writer->write_no_copy(NOT_IMPLEMENTED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_IMPLEMENTED_HTML_FINISH); writer->send(); } } void FileService::sendNotFoundResponse(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); if (http_request_ptr->get_method() != http::types::REQUEST_METHOD_HEAD) { writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); } writer->send(); } void FileService::start(void) { PION_LOG_DEBUG(m_logger, "Starting up resource (" << get_resource() << ')'); // scan directory/file if scan setting != 0 if (m_scan_setting != 0) { // force caching if scan == (2 | 3) if (m_cache_setting == 0 && m_scan_setting > 1) m_cache_setting = 1; boost::mutex::scoped_lock cache_lock(m_cache_mutex); // add entry for file if one is defined if (! m_file.empty()) { // use empty relative_path for file option // use placeholder entry (do not pre-populate) if scan == 1 addCacheEntry("", m_file, m_scan_setting == 1); } // scan directory if one is defined if (! m_directory.empty()) scanDirectory(m_directory); } } void FileService::stop(void) { PION_LOG_DEBUG(m_logger, "Shutting down resource (" << get_resource() << ')'); // clear cached files (if started again, it will re-scan) boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_cache_map.clear(); } void FileService::scanDirectory(const boost::filesystem::path& dir_path) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Scanning directory (" << get_resource() << "): " << dir_path.string()); #else PION_LOG_DEBUG(m_logger, "Scanning directory (" << get_resource() << "): " << dir_path.directory_string()); #endif // iterate through items in the directory boost::filesystem::directory_iterator end_itr; for ( boost::filesystem::directory_iterator itr( dir_path ); itr != end_itr; ++itr ) { if ( boost::filesystem::is_directory(*itr) ) { // item is a sub-directory // recursively call scanDirectory() scanDirectory(*itr); } else { // item is a regular file // figure out relative path to the file # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 std::string file_path_string( itr->path().string() ); std::string relative_path( file_path_string.substr(m_directory.string().size() + 1) ); #else std::string file_path_string( itr->path().file_string() ); std::string relative_path( file_path_string.substr(m_directory.directory_string().size() + 1) ); #endif // add item to cache (use placeholder if scan == 1) addCacheEntry(relative_path, *itr, m_scan_setting == 1); } } } std::pair FileService::addCacheEntry(const std::string& relative_path, const boost::filesystem::path& file_path, const bool placeholder) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.filename().string())); #else DiskFile cache_entry(file_path, NULL, 0, 0, findMIMEType(file_path.leaf())); #endif if (! placeholder) { cache_entry.update(); // only read the file if its size is <= max_cache_size if (m_max_cache_size==0 || cache_entry.getFileSize() <= m_max_cache_size) { try { cache_entry.read(); } catch (std::exception&) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to add file to cache: " << file_path.string()); #else PION_LOG_ERROR(m_logger, "Unable to add file to cache: " << file_path.file_string()); #endif return std::make_pair(m_cache_map.end(), false); } } } std::pair add_entry_result = m_cache_map.insert( std::make_pair(relative_path, cache_entry) ); if (add_entry_result.second) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Added file to cache: " << file_path.string()); #else PION_LOG_DEBUG(m_logger, "Added file to cache: " << file_path.file_string()); #endif } else { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to insert cache entry for file: " << file_path.string()); #else PION_LOG_ERROR(m_logger, "Unable to insert cache entry for file: " << file_path.file_string()); #endif } return add_entry_result; } std::string FileService::findMIMEType(const std::string& file_name) { // initialize m_mime_types if it hasn't been done already boost::call_once(FileService::createMIMETypes, m_mime_types_init_flag); // determine the file's extension std::string extension(file_name.substr(file_name.find_last_of('.') + 1)); boost::algorithm::to_lower(extension); // search for the matching mime type and return the result MIMETypeMap::iterator i = m_mime_types_ptr->find(extension); return (i == m_mime_types_ptr->end() ? DEFAULT_MIME_TYPE : i->second); } void FileService::createMIMETypes(void) { // create the map static MIMETypeMap mime_types; // populate mime types mime_types["js"] = "text/javascript"; mime_types["txt"] = "text/plain"; mime_types["xml"] = "text/xml"; mime_types["css"] = "text/css"; mime_types["htm"] = "text/html"; mime_types["html"] = "text/html"; mime_types["xhtml"] = "text/html"; mime_types["gif"] = "image/gif"; mime_types["png"] = "image/png"; mime_types["jpg"] = "image/jpeg"; mime_types["jpeg"] = "image/jpeg"; mime_types["svg"] = "image/svg+xml"; mime_types["eof"] = "application/vnd.ms-fontobject"; mime_types["otf"] = "application/x-font-opentype"; mime_types["ttf"] = "application/x-font-ttf"; mime_types["woff"] = "application/font-woff"; // ... // set the static pointer m_mime_types_ptr = &mime_types; } // DiskFile member functions void DiskFile::update(void) { // set file_size and last_modified m_file_size = boost::numeric_cast(boost::filesystem::file_size( m_file_path )); m_last_modified = boost::filesystem::last_write_time( m_file_path ); m_last_modified_string = http::types::get_date_string( m_last_modified ); } void DiskFile::read(void) { // re-allocate storage buffer for the file's content m_file_content.reset(new char[m_file_size]); // open the file for reading boost::filesystem::ifstream file_stream; file_stream.open(m_file_path, std::ios::in | std::ios::binary); // read the file into memory if (!file_stream.is_open() || !file_stream.read(m_file_content.get(), m_file_size)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const std::string file_name = m_file_path.string(); #else const std::string file_name = m_file_path.file_string(); #endif BOOST_THROW_EXCEPTION( error::read_file() << error::errinfo_file_name(file_name) ); } } bool DiskFile::checkUpdated(void) { // get current values std::streamsize cur_size = boost::numeric_cast(boost::filesystem::file_size( m_file_path )); time_t cur_modified = boost::filesystem::last_write_time( m_file_path ); // check if file has not been updated if (cur_modified == m_last_modified && cur_size == m_file_size) return false; // file has been updated // update file_size and last_modified timestamp m_file_size = cur_size; m_last_modified = cur_modified; m_last_modified_string = http::types::get_date_string( m_last_modified ); // read new contents read(); return true; } // DiskFileSender member functions DiskFileSender::DiskFileSender(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size) : m_logger(PION_GET_LOGGER("pion.FileService.DiskFileSender")), m_disk_file(file), m_writer(pion::http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))), m_max_chunk_size(max_chunk_size), m_file_bytes_to_send(0), m_bytes_sent(0) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_DEBUG(m_logger, "Preparing to send file" << (m_disk_file.hasFileContent() ? " (cached): " : ": ") << m_disk_file.getFilePath().string()); #else PION_LOG_DEBUG(m_logger, "Preparing to send file" << (m_disk_file.hasFileContent() ? " (cached): " : ": ") << m_disk_file.getFilePath().file_string()); #endif // set the Content-Type HTTP header using the file's MIME type m_writer->get_response().set_content_type(m_disk_file.getMimeType()); // set Last-Modified header to enable client-side caching m_writer->get_response().add_header(http::types::HEADER_LAST_MODIFIED, m_disk_file.getLastModifiedString()); // use "200 OK" HTTP response m_writer->get_response().set_status_code(http::types::RESPONSE_CODE_OK); m_writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_OK); } void DiskFileSender::send(void) { // check if we have nothing to send (send 0 byte response content) if (m_disk_file.getFileSize() <= m_bytes_sent) { m_writer->send(); return; } // calculate the number of bytes to send (m_file_bytes_to_send) m_file_bytes_to_send = m_disk_file.getFileSize() - m_bytes_sent; if (m_max_chunk_size > 0 && m_file_bytes_to_send > m_max_chunk_size) m_file_bytes_to_send = m_max_chunk_size; // get the content to send (file_content_ptr) char *file_content_ptr; if (m_disk_file.hasFileContent()) { // the entire file IS cached in memory (m_disk_file.file_content) file_content_ptr = m_disk_file.getFileContent() + m_bytes_sent; } else { // the file is not cached in memory // check if the file has been opened yet if (! m_file_stream.is_open()) { // open the file for reading m_file_stream.open(m_disk_file.getFilePath(), std::ios::in | std::ios::binary); if (! m_file_stream.is_open()) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to open file: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "Unable to open file: " << m_disk_file.getFilePath().file_string()); #endif return; } } // check if the content buffer was initialized yet if (! m_content_buf) { // allocate memory for the new content buffer m_content_buf.reset(new char[m_file_bytes_to_send]); } file_content_ptr = m_content_buf.get(); // read a block of data from the file into the content buffer if (! m_file_stream.read(m_content_buf.get(), m_file_bytes_to_send)) { if (m_file_stream.gcount() > 0) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "File size inconsistency: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "File size inconsistency: " << m_disk_file.getFilePath().file_string()); #endif } else { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 PION_LOG_ERROR(m_logger, "Unable to read file: " << m_disk_file.getFilePath().string()); #else PION_LOG_ERROR(m_logger, "Unable to read file: " << m_disk_file.getFilePath().file_string()); #endif } return; } } // send the content m_writer->write_no_copy(file_content_ptr, m_file_bytes_to_send); if (m_bytes_sent + m_file_bytes_to_send >= m_disk_file.getFileSize()) { // this is the last piece of data to send if (m_bytes_sent > 0) { // send last chunk in a series m_writer->send_final_chunk(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { // sending entire file at once m_writer->send(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } else { // there will be more data -> send a chunk m_writer->send_chunk(boost::bind(&DiskFileSender::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } } void DiskFileSender::handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { bool finished_sending = true; if (write_error) { // encountered error sending response data m_writer->get_connection()->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed PION_LOG_WARN(m_logger, "Error sending file (" << write_error.message() << ')'); } else { // response data sent OK // use m_file_bytes_to_send instead of bytes_written; bytes_written // includes bytes for HTTP headers and chunking headers m_bytes_sent += m_file_bytes_to_send; if (m_bytes_sent >= m_disk_file.getFileSize()) { // finished sending PION_LOG_DEBUG(m_logger, "Sent " << (m_file_bytes_to_send < m_disk_file.getFileSize() ? "file chunk" : "complete file") << " of " << m_file_bytes_to_send << " bytes (finished" << (m_writer->get_connection()->get_keep_alive() ? ", keeping alive)" : ", closing)") ); } else { // NOT finished sending PION_LOG_DEBUG(m_logger, "Sent file chunk of " << m_file_bytes_to_send << " bytes"); finished_sending = false; m_writer->clear(); } } if (finished_sending) { // connection::finish() calls tcp::server::finish_connection, which will either: // a) call http::server::handle_connection again if keep-alive is true; or, // b) close the socket and remove it from the server's connection pool m_writer->get_connection()->finish(); } else { send(); } } } // end namespace plugins } // end namespace pion /// creates new FileService objects extern "C" PION_PLUGIN pion::plugins::FileService *pion_create_FileService(void) { return new pion::plugins::FileService(); } /// destroys FileService objects extern "C" PION_PLUGIN void pion_destroy_FileService(pion::plugins::FileService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/LogService.cpp0000644000372000001440000001302412314121350020320 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "LogService.hpp" #if defined(PION_USE_LOG4CXX) #include #include #elif defined(PION_USE_LOG4CPLUS) #include #include #elif defined(PION_USE_LOG4CPP) #include #endif #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // static members of LogServiceAppender const unsigned int LogServiceAppender::DEFAULT_MAX_EVENTS = 25; // LogServiceAppender member functions #if defined(PION_USE_LOG4CPP) LogServiceAppender::LogServiceAppender(void) : log4cpp::AppenderSkeleton("LogServiceAppender"), m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0), m_layout_ptr(new log4cpp::BasicLayout()) {} #else LogServiceAppender::LogServiceAppender(void) : m_max_events(DEFAULT_MAX_EVENTS), m_num_events(0) {} #endif #if defined(PION_USE_LOG4CXX) void LogServiceAppender::append(const log4cxx::spi::LoggingEventPtr& event) { // custom layouts is not supported for log4cxx library std::string formatted_string(boost::lexical_cast(event->getTimeStamp())); formatted_string += ' '; formatted_string += event->getLevel()->toString(); formatted_string += ' '; formatted_string += event->getLoggerName(); formatted_string += " - "; formatted_string += event->getRenderedMessage(); formatted_string += '\n'; addLogString(formatted_string); } #elif defined(PION_USE_LOG4CPLUS) void LogServiceAppender::append(const log4cplus::spi::InternalLoggingEvent& event) { // custom layouts is not supported for log4cplus library std::string formatted_string(boost::lexical_cast(event.getTimestamp().sec())); formatted_string += ' '; formatted_string += m_log_level_manager.toString(event.getLogLevel()); formatted_string += ' '; formatted_string += event.getLoggerName(); formatted_string += " - "; formatted_string += event.getMessage(); formatted_string += '\n'; addLogString(formatted_string); } #elif defined(PION_USE_LOG4CPP) void LogServiceAppender::_append(const log4cpp::LoggingEvent& event) { std::string formatted_string(m_layout_ptr->format(event)); addLogString(formatted_string); } #endif void LogServiceAppender::addLogString(const std::string& log_string) { boost::mutex::scoped_lock log_lock(m_log_mutex); m_log_events.push_back(log_string); ++m_num_events; while (m_num_events > m_max_events) { m_log_events.erase(m_log_events.begin()); --m_num_events; } } void LogServiceAppender::writeLogEvents(pion::http::response_writer_ptr& writer) { #if defined(PION_USE_LOG4CXX) || defined(PION_USE_LOG4CPLUS) || defined(PION_USE_LOG4CPP) boost::mutex::scoped_lock log_lock(m_log_mutex); for (std::list::const_iterator i = m_log_events.begin(); i != m_log_events.end(); ++i) { writer << *i; } #elif defined(PION_DISABLE_LOGGING) writer << "Logging is disabled." << http::types::STRING_CRLF; #else writer << "Using ostream logging." << http::types::STRING_CRLF; #endif } // LogService member functions LogService::LogService(void) : m_log_appender_ptr(new LogServiceAppender()) { #if defined(PION_USE_LOG4CXX) m_log_appender_ptr->setName("LogServiceAppender"); log4cxx::Logger::getRootLogger()->addAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPLUS) m_log_appender_ptr->setName("LogServiceAppender"); log4cplus::Logger::getRoot().addAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPP) log4cpp::Category::getRoot().addAppender(m_log_appender_ptr); #endif } LogService::~LogService() { #if defined(PION_USE_LOG4CXX) // removeAppender() also deletes the object log4cxx::Logger::getRootLogger()->removeAppender(m_log_appender_ptr); #elif defined(PION_USE_LOG4CPLUS) // removeAppender() also deletes the object log4cplus::Logger::getRoot().removeAppender("LogServiceAppender"); #elif defined(PION_USE_LOG4CPP) // removeAppender() also deletes the object log4cpp::Category::getRoot().removeAppender(m_log_appender_ptr); #else delete m_log_appender_ptr; #endif } /// handles requests for LogService void LogService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // Set Content-type to "text/plain" (plain ascii text) http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT); getLogAppender().writeLogEvents(writer); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new LogService objects extern "C" PION_PLUGIN pion::plugins::LogService *pion_create_LogService(void) { return new pion::plugins::LogService(); } /// destroys LogService objects extern "C" PION_PLUGIN void pion_destroy_LogService(pion::plugins::LogService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/EchoService.cpp0000644000372000001440000001271212314121350020460 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "EchoService.hpp" #include #include #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// used by handle_request to write dictionary terms void writeDictionaryTerm(http::response_writer_ptr& writer, const ihash_multimap::value_type& val) { // text is copied into writer text cache writer << val.first << http::types::HEADER_NAME_VALUE_DELIMITER << val.second << http::types::STRING_CRLF; } // EchoService member functions /// handles requests for EchoService void EchoService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // this web service uses static text to test the mixture of "copied" with // "static" (no-copy) text static const std::string REQUEST_ECHO_TEXT("[Request Echo]"); static const std::string REQUEST_HEADERS_TEXT("[Request Headers]"); static const std::string QUERY_PARAMS_TEXT("[Query Parameters]"); static const std::string COOKIE_PARAMS_TEXT("[Cookie Parameters]"); static const std::string POST_CONTENT_TEXT("[POST Content]"); static const std::string USER_INFO_TEXT("[USER Info]"); // Set Content-type to "text/plain" (plain ascii text) http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT); // write request information writer->write_no_copy(REQUEST_ECHO_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer << "Request method: " << http_request_ptr->get_method() << http::types::STRING_CRLF << "Resource originally requested: " << http_request_ptr->get_original_resource() << http::types::STRING_CRLF << "Resource delivered: " << http_request_ptr->get_resource() << http::types::STRING_CRLF << "Query string: " << http_request_ptr->get_query_string() << http::types::STRING_CRLF << "HTTP version: " << http_request_ptr->get_version_major() << '.' << http_request_ptr->get_version_minor() << http::types::STRING_CRLF << "Content length: " << (unsigned long)http_request_ptr->get_content_length() << http::types::STRING_CRLF << http::types::STRING_CRLF; // write request headers writer->write_no_copy(REQUEST_HEADERS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_headers().begin(), http_request_ptr->get_headers().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write query parameters writer->write_no_copy(QUERY_PARAMS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_queries().begin(), http_request_ptr->get_queries().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write cookie parameters writer->write_no_copy(COOKIE_PARAMS_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); std::for_each(http_request_ptr->get_cookies().begin(), http_request_ptr->get_cookies().end(), boost::bind(&writeDictionaryTerm, writer, _1)); writer->write_no_copy(http::types::STRING_CRLF); // write POST content writer->write_no_copy(POST_CONTENT_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); if (http_request_ptr->get_content_length() != 0) { writer->write(http_request_ptr->get_content(), http_request_ptr->get_content_length()); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); } // if authenticated, write user info user_ptr user = http_request_ptr->get_user(); if (user) { writer->write_no_copy(USER_INFO_TEXT); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer << "User authenticated, username: " << user->get_username(); writer->write_no_copy(http::types::STRING_CRLF); } // send the writer writer->send(); } } // end namespace plugins } // end namespace pion /// creates new EchoService objects extern "C" PION_PLUGIN pion::plugins::EchoService *pion_create_EchoService(void) { return new pion::plugins::EchoService(); } /// destroys EchoService objects extern "C" PION_PLUGIN void pion_destroy_EchoService(pion::plugins::EchoService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/HelloService.cpp0000644000372000001440000000312512314121350020643 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "HelloService.hpp" #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins // HelloService member functions /// handles requests for HelloService void HelloService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string HELLO_HTML = "Hello World!"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->write_no_copy(HELLO_HTML); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new HelloService objects extern "C" PION_PLUGIN pion::plugins::HelloService *pion_create_HelloService(void) { return new pion::plugins::HelloService(); } /// destroys HelloService objects extern "C" PION_PLUGIN void pion_destroy_HelloService(pion::plugins::HelloService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/FileService.vcxproj.filters0000644000372000001440000000203212314121350023033 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/CookieService.vcxproj.filters0000644000372000001440000000203612314121350023371 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/HelloService.vcxproj.filters0000644000372000001440000000203412314121350023221 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/AllowNothingService.vcxproj0000644000372000001440000003560412314121350023125 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {8C8A8E46-4588-4CE1-B624-89C36EA5209E} AllowNothingService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ $(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(Platform)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(Configuration)_$(PlatformName)\ $(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 ALLOWNOTHINGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/CookieService.vcxproj0000644000372000001440000003314712314121350021731 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {1CF012D8-A47C-4D2B-952D-D90D19795A07} CookieService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 COOKIESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/FileService.hpp0000644000372000001440000003214312314121350020466 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_FILESERVICE_HEADER__ #define __PION_FILESERVICE_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// DiskFile: class used to represent files stored on disk /// class DiskFile { public: /// default constructor DiskFile(void) : m_file_size(0), m_last_modified(0) {} /// used to construct new disk file objects DiskFile(const boost::filesystem::path& path, char *content, unsigned long size, std::time_t modified, const std::string& mime) : m_file_path(path), m_file_content(content), m_file_size(size), m_last_modified(modified), m_mime_type(mime) {} /// copy constructor DiskFile(const DiskFile& f) : m_file_path(f.m_file_path), m_file_content(f.m_file_content), m_file_size(f.m_file_size), m_last_modified(f.m_last_modified), m_last_modified_string(f.m_last_modified_string), m_mime_type(f.m_mime_type) {} /// updates the file_size and last_modified timestamp to disk void update(void); /// reads content from disk into file_content buffer (may throw) void read(void); /** * checks if the file has been updated and updates vars if it has (may throw) * * @return true if the file was updated */ bool checkUpdated(void); /// return path to the cached file inline const boost::filesystem::path& getFilePath(void) const { return m_file_path; } /// returns content of the cached file inline char *getFileContent(void) { return m_file_content.get(); } /// returns true if there is cached file content inline bool hasFileContent(void) const { return static_cast(m_file_content); } /// returns size of the file's content inline unsigned long getFileSize(void) const { return m_file_size; } /// returns timestamp that the cached file was last modified (0 = cache disabled) inline std::time_t getLastModified(void) const { return m_last_modified; } /// returns timestamp that the cached file was last modified (string format) inline const std::string& getLastModifiedString(void) const { return m_last_modified_string; } /// returns mime type for the cached file inline const std::string& getMimeType(void) const { return m_mime_type; } /// sets the path to the cached file inline void setFilePath(const boost::filesystem::path& p) { m_file_path = p; } /// appends to the path of the cached file inline void appendFilePath(const std::string& p) { m_file_path /= p; } /// sets the mime type for the cached file inline void setMimeType(const std::string& t) { m_mime_type = t; } /// resets the size of the file content buffer inline void resetFileContent(unsigned long n = 0) { if (n == 0) m_file_content.reset(); else m_file_content.reset(new char[n]); } protected: /// path to the cached file boost::filesystem::path m_file_path; /// content of the cached file boost::shared_array m_file_content; /// size of the file's content std::streamsize m_file_size; /// timestamp that the cached file was last modified (0 = cache disabled) std::time_t m_last_modified; /// timestamp that the cached file was last modified (string format) std::string m_last_modified_string; /// mime type for the cached file std::string m_mime_type; }; /// /// DiskFileSender: class used to send files to clients using HTTP responses /// class DiskFileSender : public boost::enable_shared_from_this, private boost::noncopyable { public: /** * creates new DiskFileSender objects * * @param file disk file object that should be sent * @param http_request_ptr HTTP request that we are responding to * @param tcp_conn TCP connection used to send the file * @param max_chunk_size sets the maximum chunk size (default=0, unlimited) */ static inline boost::shared_ptr create(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size = 0) { return boost::shared_ptr(new DiskFileSender(file, http_request_ptr, tcp_conn, max_chunk_size)); } /// default virtual destructor virtual ~DiskFileSender() {} /// Begins sending the file to the client. Following a call to this /// function, it is not thread safe to use your reference to the /// DiskFileSender object. void send(void); /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param file disk file object that should be sent * @param http_request_ptr HTTP request that we are responding to * @param tcp_conn TCP connection used to send the file * @param max_chunk_size sets the maximum chunk size */ DiskFileSender(DiskFile& file, pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn, unsigned long max_chunk_size); /** * handler called after a send operation has completed * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written); /// primary logging interface used by this class logger m_logger; private: /// the disk file we are sending DiskFile m_disk_file; /// the HTTP response we are sending pion::http::response_writer_ptr m_writer; /// used to read the file from disk if it is not already cached in memory boost::filesystem::ifstream m_file_stream; /// buffer used to send file content boost::shared_array m_content_buf; /** * maximum chunk size (in bytes): files larger than this size will be * delivered to clients using HTTP chunked responses. A value of * zero means that the size is unlimited (chunking is disabled). */ unsigned long m_max_chunk_size; /// the number of file bytes send in the last operation unsigned long m_file_bytes_to_send; /// the number of bytes we have sent so far unsigned long m_bytes_sent; }; /// data type for a DiskFileSender pointer typedef boost::shared_ptr DiskFileSenderPtr; /// /// FileService: web service that serves regular files /// class FileService : public pion::http::plugin_service { public: // default constructor and destructor FileService(void); virtual ~FileService() {} /** * configuration options supported by FileService: * * directory: all files within the directory will be made available * file: * cache: * scan: * max_chunk_size: * writable: */ virtual void set_option(const std::string& name, const std::string& value); /// handles requests for FileService virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// called when the web service's server is starting virtual void start(void); /// called when the web service's server is stopping virtual void stop(void); /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } protected: /// data type for map of file names to cache entries typedef PION_HASH_MAP CacheMap; /// data type for map of file extensions to MIME types typedef PION_HASH_MAP MIMETypeMap; /** * adds all files within a directory to the cache * * @param dir_path the directory to scan (sub-directories are included) */ void scanDirectory(const boost::filesystem::path& dir_path); /** * adds a single file to the cache * * @param relative_path path for the file relative to the root directory * @param file_path actual path to the file on disk * @param placeholder if true, the file's contents are not cached * * @return std::pair if an entry is added to the * cache, second will be true and first will point to the new entry */ std::pair addCacheEntry(const std::string& relative_path, const boost::filesystem::path& file_path, const bool placeholder); /** * searches for a MIME type that matches a file * * @param file_name name of the file to search for * @return MIME type corresponding with the file, or DEFAULT_MIME_TYPE if none found */ static std::string findMIMEType(const std::string& file_name); void sendNotFoundResponse(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// primary logging interface used by this class logger m_logger; private: /// function called once to initialize the map of MIME types static void createMIMETypes(void); /// mime type used if no others are found for the file's extension static const std::string DEFAULT_MIME_TYPE; /// default setting for cache configuration option static const unsigned int DEFAULT_CACHE_SETTING; /// default setting for scan configuration option static const unsigned int DEFAULT_SCAN_SETTING; /// default setting for the maximum cache size option static const unsigned long DEFAULT_MAX_CACHE_SIZE; /// default setting for the maximum chunk size option static const unsigned long DEFAULT_MAX_CHUNK_SIZE; /// flag used to make sure that createMIMETypes() is called only once static boost::once_flag m_mime_types_init_flag; /// map of file extensions to MIME types static MIMETypeMap * m_mime_types_ptr; /// directory containing files that will be made available boost::filesystem::path m_directory; /// single file served by the web service boost::filesystem::path m_file; /// used to cache file contents and metadata in memory CacheMap m_cache_map; /// mutex used to make the file cache thread-safe boost::mutex m_cache_mutex; /** * cache configuration setting: * 0 = do not cache files in memory * 1 = cache files in memory when requested, check for any updates * 2 = cache files in memory when requested, ignore any updates */ unsigned int m_cache_setting; /** * scan configuration setting (only applies to directories): * 0 = do not scan the directory; allow files to be added at any time * 1 = scan directory when started, and do not allow files to be added * 2 = scan directory and pre-populate cache; allow new files * 3 = scan directory and pre-populate cache; ignore new files */ unsigned int m_scan_setting; /** * maximum cache size (in bytes): files larger than this size will never be * cached in memory. A value of zero means that the size is unlimited. */ unsigned long m_max_cache_size; /** * maximum chunk size (in bytes): files larger than this size will be * delivered to clients using HTTP chunked responses. A value of * zero means that the size is unlimited (chunking is disabled). */ unsigned long m_max_chunk_size; /** * Whether the file and/or directory served are writable. */ bool m_writable; }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/services/AllowNothingService.vcxproj.filters0000644000372000001440000000205212314121350024563 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/FileService.vcxproj0000644000372000001440000003313112314121350021370 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {70CA1FA9-BA9A-4EA4-9B7B-C747238991C1} FileService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 FILESERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/EchoService.hpp0000644000372000001440000000201412314121350020457 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ECHOSERVICE_HEADER__ #define __PION_ECHOSERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// EchoService: web service that echos back requests (to test request parsing) /// class EchoService : public pion::http::plugin_service { public: EchoService(void) {} virtual ~EchoService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/services/AllowNothingService.cpp0000644000372000001440000000407312314121350022210 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include "AllowNothingService.hpp" #include #include using namespace pion; namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins void AllowNothingService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string DENY_HTML = "No, you can't."; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); // This is a legitimate header, but it crashes when it's sent. //writer->get_response().add_header("Allow", ""); // Use this line to demonstrate that it's the empty header value that's causing the problem. writer->get_response().add_header("Allow", "GET"); writer->write_no_copy(DENY_HTML); writer->write_no_copy(http::types::STRING_CRLF); writer->write_no_copy(http::types::STRING_CRLF); writer->send(); } } // end namespace plugins } // end namespace pion /// creates new AllowNothingService objects extern "C" PION_PLUGIN pion::plugins::AllowNothingService *pion_create_AllowNothingService(void) { return new pion::plugins::AllowNothingService(); } /// destroys AllowNothingService objects extern "C" PION_PLUGIN void pion_destroy_AllowNothingService(pion::plugins::AllowNothingService *service_ptr) { delete service_ptr; } pion-5.0.6+dfsg.orig/services/HelloService.vcxproj0000644000372000001440000003314012314121350021554 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {9EE2433A-B460-45E0-8968-EC5CE8EF9875} HelloService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 HELLOSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/Makefile.am0000644000372000001440000000415412314121350017612 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include pion_pluginsdir = @PION_PLUGINS_DIRECTORY@ pion_plugins_LTLIBRARIES = HelloService.la EchoService.la \ CookieService.la LogService.la FileService.la AllowNothingService.la HelloService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) HelloService_la_SOURCES = HelloService.hpp HelloService.cpp HelloService_la_LDFLAGS = -no-undefined -module -avoid-version HelloService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ HelloService_la_DEPENDENCIES = ../src/libpion.la EchoService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) EchoService_la_SOURCES = EchoService.hpp EchoService.cpp EchoService_la_LDFLAGS = -no-undefined -module -avoid-version EchoService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ EchoService_la_DEPENDENCIES = ../src/libpion.la CookieService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) CookieService_la_SOURCES = CookieService.hpp CookieService.cpp CookieService_la_LDFLAGS = -no-undefined -module -avoid-version CookieService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ CookieService_la_DEPENDENCIES = ../src/libpion.la LogService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) LogService_la_SOURCES = LogService.hpp LogService.cpp LogService_la_LDFLAGS = -no-undefined -module -avoid-version LogService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ LogService_la_DEPENDENCIES = ../src/libpion.la # Build both dynamic and static library for FileService #FileService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) FileService_la_SOURCES = FileService.hpp FileService.cpp FileService_la_LDFLAGS = -no-undefined -module -avoid-version FileService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ FileService_la_DEPENDENCIES = ../src/libpion.la AllowNothingService_la_CXXFLAGS = -shared $(AM_CXXFLAGS) AllowNothingService_la_SOURCES = AllowNothingService.hpp AllowNothingService.cpp AllowNothingService_la_LDFLAGS = -no-undefined -module -avoid-version AllowNothingService_la_LIBADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ AllowNothingService_la_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = *.vcxproj *.vcxproj.filters pion-5.0.6+dfsg.orig/services/LogService.vcxproj0000644000372000001440000003312212314121350021232 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {12F95FE7-ACE1-4281-86BF-4117AE2D633E} LogService Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ X64 ProgramDatabase X64 MultiThreadedDLL LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false X64 LOGSERVICE_EXPORTS;PION_FULL;%(PreprocessorDefinitions) false MachineX64 MultiThreadedDLL {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/services/AllowNothingService.hpp0000644000372000001440000000223112314121350022207 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ALLOW_NOTHING_SERVICE_HEADER__ #define __PION_ALLOW_NOTHING_SERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// This class has a corresponding create function (pion_create_AllowNothingService) and /// destroy function (pion_destroy_AllowNothingService), as required for use by plugin. /// class AllowNothingService : public pion::http::plugin_service { public: AllowNothingService(void) {} ~AllowNothingService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/services/CookieService.hpp0000644000372000001440000000201312314121350021011 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_COOKIESERVICE_HEADER__ #define __PION_COOKIESERVICE_HEADER__ #include namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// CookieService: web service that displays and updates cookies /// class CookieService : public pion::http::plugin_service { public: CookieService(void) {} virtual ~CookieService() {} virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/services/EchoService.vcxproj.filters0000644000372000001440000000203212314121350023032 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Header Files pion-5.0.6+dfsg.orig/services/LogService.hpp0000644000372000001440000001152412314121350020330 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_LOGSERVICE_HEADER__ #define __PION_LOGSERVICE_HEADER__ #include #include #include #include #include #include #include #if defined(PION_USE_LOG4CXX) #include // version 0.10.x introduces a new data type that is declared in a // pool.h header file. If we're using 0.9.x, just declare the type // as an int since it is not being used at all #ifndef _LOG4CXX_HELPERS_POOL_H namespace log4cxx { namespace helpers { typedef int Pool; } } #endif #endif namespace pion { // begin namespace pion namespace plugins { // begin namespace plugins /// /// LogServiceAppender: caches log events in memory for use by LogService /// class LogServiceAppender #ifdef PION_HAS_LOG_APPENDER : public log_appender #endif { public: // default constructor and destructor LogServiceAppender(void); virtual ~LogServiceAppender() {} /// sets the maximum number of log events cached in memory inline void setMaxEvents(unsigned int n) { m_max_events = n; } /// adds a formatted log message to the memory cache void addLogString(const std::string& log_string); /// writes the events cached in memory to a response stream void writeLogEvents(pion::http::response_writer_ptr& writer); private: /// default maximum number of events cached in memory static const unsigned int DEFAULT_MAX_EVENTS; /// maxiumum number of events cached in memory unsigned int m_max_events; /// number of events currently cached in memory unsigned int m_num_events; /// memory cache of pre-formatted log events std::list m_log_events; /// mutex to make class thread-safe boost::mutex m_log_mutex; #if defined(PION_USE_LOG4CXX) public: // member functions inherited from the Appender interface class virtual void close() {} virtual bool requiresLayout() const { return false; } protected: /// adds log event to the memory cache virtual void append(const log4cxx::spi::LoggingEventPtr& event); // version 0.10.x adds a second "pool" argument -> just ignore it virtual void append(const log4cxx::spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool) { append(event); } #elif defined(PION_USE_LOG4CPLUS) public: // member functions inherited from the Appender interface class virtual void close() {} protected: virtual void append(const log4cplus::spi::InternalLoggingEvent& event); private: /// this is used to convert numeric log levels into strings log4cplus::LogLevelManager m_log_level_manager; #elif defined(PION_USE_LOG4CPP) public: // member functions inherited from the AppenderSkeleton class virtual void close() {} virtual bool requiresLayout() const { return true; } virtual void setLayout(log4cpp::Layout* layout) { m_layout_ptr.reset(layout); } protected: /// adds log event to the memory cache virtual void _append(const log4cpp::LoggingEvent& event); private: /// the logging layout used to format events boost::scoped_ptr m_layout_ptr; #endif }; /// /// LogService: web service that displays log messages /// class LogService : public pion::http::plugin_service { public: // default constructor and destructor LogService(void); virtual ~LogService(); /// handles a new HTTP request virtual void operator()(pion::http::request_ptr& http_request_ptr, pion::tcp::connection_ptr& tcp_conn); /// returns the log appender used by LogService inline LogServiceAppender& getLogAppender(void) { #ifdef PION_HAS_LOG_APPENDER return dynamic_cast(*m_log_appender_ptr); #else return *m_log_appender_ptr; #endif } private: /// this is used to keep track of log messages #ifdef PION_HAS_LOG_APPENDER log_appender_ptr m_log_appender_ptr; #else LogServiceAppender * m_log_appender_ptr; #endif }; } // end namespace plugins } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/0000755000372000001440000000000012314121442015354 5ustar robertouserspion-5.0.6+dfsg.orig/include/Makefile.in0000644000372000001440000004461312314121377017440 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = pion all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/0000755000372000001440000000000012314121444016323 5ustar robertouserspion-5.0.6+dfsg.orig/include/pion/admin_rights.hpp0000644000372000001440000000517412314121350021507 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ADMIN_RIGHTS_HEADER__ #define __PION_ADMIN_RIGHTS_HEADER__ #include #include #include #include namespace pion { // begin namespace pion /// /// admin_rights: obtains administrative rights for the process /// class PION_API admin_rights { public: /** * constructs object, obtaining administrative rights; will block * if another thread has already obtained rights * * @param use_log if false, then no logging will be performed */ admin_rights(bool use_log = true); /// destructor releases administrative rights virtual ~admin_rights() { release(); } /// releases administrative rights void release(void); /// calculates the user id based upon the user configuration parameter static long run_as_user(const std::string& user_name); /// calculates the group id based upon the group configuration parameter static long run_as_group(const std::string& group_name); private: /** * finds an identifier within a system credentials file (users or groups) * * @param name descriptive name to lookup (user or group name, may be id) * @param file system credentials file to look within * * @return boost::int32_t identifier found, or -1 if none found */ static long find_system_id(const std::string& name, const std::string& file); /// adminisitrator or root user identifier static const boost::int16_t ADMIN_USER_ID; /// mutex used to prevent multiple threads from corrupting user id static boost::mutex m_mutex; /// primary logging interface used by this class logger m_logger; /// lock used to prevent multiple threads from corrupting user id boost::unique_lock m_lock; /// saved user identifier before upgrading to administrator boost::int16_t m_user_id; /// true if the class currently holds administrative rights bool m_has_rights; /// if false, then no logging will be performed bool m_use_log; }; } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/config.hpp.xcode0000644000372000001440000000470112314121350021400 0ustar robertousers/* common/include/pion/PionConfig.hpp. Generated from PionConfig.hpp.in by configure. */ // --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! /* Define to the version number of pion. */ #define PION_VERSION "5.0.6" /* Define to the directory where Pion plug-ins are installed. */ #define PION_PLUGINS_DIRECTORY "/usr/local/lib/pion/plugins" /* Define to the directory where cygwin is installed. */ #define PION_CYGWIN_DIRECTORY "" /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #define PION_HAVE_EXT_HASH_MAP 1 /* Define to 1 if you have the header file. */ /* #undef PION_HAVE_HASH_MAP */ /* Define to 1 if you have the header file. */ /* #undef PION_HAVE_UNORDERED_MAP */ // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* Define to 1 to use the `log4cplus' library (-llog4cplus) for logging. */ #define PION_USE_LOG4CPLUS 1 /* Define to 1 to use the `log4cxx' library (-llog4cxx) for logging. */ /* #undef PION_USE_LOG4CXX */ /* Define to 1 to use the `log4cpp' library (-llog4cpp) for logging. */ /* #undef PION_USE_LOG4CPP */ /* Define to 1 to disable logging. */ /* #undef PION_DISABLE_LOGGING */ // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #define PION_HAVE_ZLIB 1 /* Define to 1 if you have the `bzlib' library. */ #define PION_HAVE_BZLIB 1 /* Define to 1 if you have the `OpenSSL' library. */ #define PION_HAVE_SSL 1 /* This is used by Windows projects to flag exported symbols */ #define PION_API #define PION_PLUGIN #endif pion-5.0.6+dfsg.orig/include/pion/logger.hpp0000644000372000001440000002754412314121350020323 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_LOGGER_HEADER__ #define __PION_LOGGER_HEADER__ #include #if defined(PION_USE_LOG4CXX) // unfortunately, the current version of log4cxx has many problems that // produce very annoying warnings // log4cxx headers #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4231) // nonstandard extension used : 'extern' before template explicit instantiation #endif #include #include #ifdef _MSC_VER #pragma warning(pop) #endif #if defined _MSC_VER #if defined _DEBUG #pragma comment(lib, "log4cxxd") #else #pragma comment(lib, "log4cxx") #endif #pragma comment(lib, "odbc32") #endif namespace pion { typedef log4cxx::LoggerPtr logger; typedef log4cxx::AppenderSkeleton log_appender; typedef log_appender * log_appender_ptr; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC log4cxx::BasicConfigurator::configure(); #define PION_LOG_CONFIG(FILE) log4cxx::PropertyConfigurator::configure(FILE); #define PION_GET_LOGGER(NAME) log4cxx::Logger::get_logger(NAME) #define PION_SHUTDOWN_LOGGER log4cxx::LogManager::shutdown(); #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::DEBUG_INT)); #define PION_LOG_SETLEVEL_INFO(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::INFO_INT)); #define PION_LOG_SETLEVEL_WARN(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::WARN_INT)); #define PION_LOG_SETLEVEL_ERROR(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::ERROR_INT)); #define PION_LOG_SETLEVEL_FATAL(LOG) LOG->setLevel(log4cxx::Level::toLevel(log4cxx::Level::FATAL_INT)); #define PION_LOG_SETLEVEL_UP(LOG) LOG->setLevel(LOG->getLevel()->toInt()+1); #define PION_LOG_SETLEVEL_DOWN(LOG) LOG->setLevel(LOG->getLevel()->toInt()-1); #define PION_LOG_DEBUG LOG4CXX_DEBUG #define PION_LOG_INFO LOG4CXX_INFO #define PION_LOG_WARN LOG4CXX_WARN #define PION_LOG_ERROR LOG4CXX_ERROR #define PION_LOG_FATAL LOG4CXX_FATAL #elif defined(PION_USE_LOG4CPLUS) // log4cplus headers #include #include #include #include #include #include #include #include #if defined(_MSC_VER) && !defined(PION_CMAKE_BUILD) #if defined _DEBUG #if defined PION_STATIC_LINKING #pragma comment(lib, "log4cplusSD") #else #pragma comment(lib, "log4cplusD") #endif #else #if defined PION_STATIC_LINKING #pragma comment(lib, "log4cplusS") #else #pragma comment(lib, "log4cplus") #endif #endif #endif namespace pion { typedef log4cplus::Logger logger; typedef log4cplus::Appender log_appender; typedef log4cplus::SharedAppenderPtr log_appender_ptr; /// /// circular_buffer_appender: caches log events in a circular buffer /// class circular_buffer_appender : public log4cplus::Appender { public: typedef boost::circular_buffer LogEventBuffer; // default constructor and destructor circular_buffer_appender(void) : m_log_events(1000) {}; virtual ~circular_buffer_appender() {} /// returns an iterator to the log events in the buffer const LogEventBuffer& getLogIterator() const { return m_log_events; } public: // member functions inherited from the Appender interface class virtual void close() {} protected: virtual void append(const log4cplus::spi::InternalLoggingEvent& event) { boost::mutex::scoped_lock log_lock(m_log_mutex); m_log_events.push_back(*event.clone()); } private: /// circular buffer for log events LogEventBuffer m_log_events; /// mutex to make class thread-safe boost::mutex m_log_mutex; }; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC log4cplus::BasicConfigurator::doConfigure(); #define PION_LOG_CONFIG(FILE) log4cplus::PropertyConfigurator::doConfigure(FILE); #define PION_GET_LOGGER(NAME) log4cplus::Logger::getInstance(NAME) #define PION_SHUTDOWN_LOGGER log4cplus::Logger::shutdown(); #define PION_LOG_SETLEVEL_DEBUG(LOG) LOG.setLogLevel(log4cplus::DEBUG_LOG_LEVEL); #define PION_LOG_SETLEVEL_INFO(LOG) LOG.setLogLevel(log4cplus::INFO_LOG_LEVEL); #define PION_LOG_SETLEVEL_WARN(LOG) LOG.setLogLevel(log4cplus::WARN_LOG_LEVEL); #define PION_LOG_SETLEVEL_ERROR(LOG) LOG.setLogLevel(log4cplus::ERROR_LOG_LEVEL); #define PION_LOG_SETLEVEL_FATAL(LOG) LOG.setLogLevel(log4cplus::FATAL_LOG_LEVEL); #define PION_LOG_SETLEVEL_UP(LOG) LOG.setLogLevel(LOG.getLogLevel()+1); #define PION_LOG_SETLEVEL_DOWN(LOG) LOG.setLogLevel(LOG.getLogLevel()-1); #define PION_LOG_DEBUG LOG4CPLUS_DEBUG #define PION_LOG_INFO LOG4CPLUS_INFO #define PION_LOG_WARN LOG4CPLUS_WARN #define PION_LOG_ERROR LOG4CPLUS_ERROR #define PION_LOG_FATAL LOG4CPLUS_FATAL #elif defined(PION_USE_LOG4CPP) // log4cpp headers #include #include #include #include namespace pion { typedef log4cpp::Category* logger; typedef log4cpp::AppenderSkeleton log_appender; typedef log_appender * log_appender_ptr; } #define PION_HAS_LOG_APPENDER 1 #define PION_LOG_CONFIG_BASIC { log4cpp::OstreamAppender *app = new log4cpp::OstreamAppender("cout", &std::cout); app->setLayout(new log4cpp::BasicLayout()); log4cpp::Category::getRoot().setAppender(app); } #define PION_LOG_CONFIG(FILE) { log4cpp::PropertyConfigurator::configure(FILE); } #define PION_GET_LOGGER(NAME) (&log4cpp::Category::getInstance(NAME)) #define PION_SHUTDOWN_LOGGER log4cpp::Category::shutdown(); #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG->setPriority(log4cpp::Priority::DEBUG); } #define PION_LOG_SETLEVEL_INFO(LOG) { LOG->setPriority(log4cpp::Priority::INFO); } #define PION_LOG_SETLEVEL_WARN(LOG) { LOG->setPriority(log4cpp::Priority::WARN); } #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG->setPriority(log4cpp::Priority::ERROR); } #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG->setPriority(log4cpp::Priority::FATAL); } #define PION_LOG_SETLEVEL_UP(LOG) { LOG->setPriority(LOG.getPriority()+1); } #define PION_LOG_SETLEVEL_DOWN(LOG) { LOG->setPriority(LOG.getPriority()-1); } #define PION_LOG_DEBUG(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::DEBUG) { LOG->debugStream() << MSG; } #define PION_LOG_INFO(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::INFO) { LOG->infoStream() << MSG; } #define PION_LOG_WARN(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::WARN) { LOG->warnStream() << MSG; } #define PION_LOG_ERROR(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::ERROR) { LOG->errorStream() << MSG; } #define PION_LOG_FATAL(LOG, MSG) if (LOG->getPriority()>=log4cpp::Priority::FATAL) { LOG->fatalStream() << MSG; } #elif defined(PION_DISABLE_LOGGING) // Logging is disabled -> add do-nothing stubs for logging namespace pion { struct PION_API logger { logger(int /* glog */) {} operator bool() const { return false; } static void shutdown() {} }; typedef int log_appender; typedef log_appender * log_appender_ptr; } #undef PION_HAS_LOG_APPENDER #define PION_LOG_CONFIG_BASIC {} #define PION_LOG_CONFIG(FILE) {} #define PION_GET_LOGGER(NAME) 0 #define PION_SHUTDOWN_LOGGER 0 // use LOG to avoid warnings about LOG not being used #define PION_LOG_SETLEVEL_DEBUG(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_INFO(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_WARN(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_ERROR(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_FATAL(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_UP(LOG) { if (LOG) {} } #define PION_LOG_SETLEVEL_DOWN(LOG) { if (LOG) {} } #define PION_LOG_DEBUG(LOG, MSG) { if (LOG) {} } #define PION_LOG_INFO(LOG, MSG) { if (LOG) {} } #define PION_LOG_WARN(LOG, MSG) { if (LOG) {} } #define PION_LOG_ERROR(LOG, MSG) { if (LOG) {} } #define PION_LOG_FATAL(LOG, MSG) { if (LOG) {} } #else #define PION_USE_OSTREAM_LOGGING // Logging uses std::cout and std::cerr #include #include #include namespace pion { struct PION_API logger { enum log_priority_type { LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_WARN, LOG_LEVEL_ERROR, LOG_LEVEL_FATAL }; ~logger() {} logger(void) : m_name("pion") {} logger(const std::string& name) : m_name(name) {} logger(const logger& p) : m_name(p.m_name) {} static void shutdown() {} std::string m_name; static log_priority_type m_priority; }; typedef int log_appender; typedef log_appender * log_appender_ptr; } #undef PION_HAS_LOG_APPENDER #define PION_LOG_CONFIG_BASIC {} #define PION_LOG_CONFIG(FILE) {} #define PION_GET_LOGGER(NAME) pion::logger(NAME) #define PION_SHUTDOWN_LOGGER {} #define PION_LOG_SETLEVEL_DEBUG(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_DEBUG; } #define PION_LOG_SETLEVEL_INFO(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_INFO; } #define PION_LOG_SETLEVEL_WARN(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_WARN; } #define PION_LOG_SETLEVEL_ERROR(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_ERROR; } #define PION_LOG_SETLEVEL_FATAL(LOG) { LOG.m_priority = pion::logger::LOG_LEVEL_FATAL; } #define PION_LOG_SETLEVEL_UP(LOG) { ++LOG.m_priority; } #define PION_LOG_SETLEVEL_DOWN(LOG) { --LOG.m_priority; } #define PION_LOG_DEBUG(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_DEBUG) { std::cout << time(NULL) << " DEBUG " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_INFO(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_INFO) { std::cout << time(NULL) << " INFO " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_WARN(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_WARN) { std::cerr << time(NULL) << " WARN " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_ERROR(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_ERROR) { std::cerr << time(NULL) << " ERROR " << LOG.m_name << ' ' << MSG << std::endl; } #define PION_LOG_FATAL(LOG, MSG) if (LOG.m_priority <= pion::logger::LOG_LEVEL_FATAL) { std::cerr << time(NULL) << " FATAL " << LOG.m_name << ' ' << MSG << std::endl; } #endif #endif pion-5.0.6+dfsg.orig/include/pion/config.hpp.in0000644000372000001440000000441512314121442020710 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! /* Define to the version number of pion. */ #undef PION_VERSION /* Define to the directory where Pion plug-ins are installed. */ #undef PION_PLUGINS_DIRECTORY /* Define to the directory where cygwin is installed. */ #undef PION_CYGWIN_DIRECTORY /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #undef PION_HAVE_EXT_HASH_MAP /* Define to 1 if you have the header file. */ #undef PION_HAVE_HASH_MAP /* Define to 1 if you have the header file. */ #undef PION_HAVE_UNORDERED_MAP // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* Define to 1 to use the `log4cplus' library (-llog4cplus) for logging. */ #undef PION_USE_LOG4CPLUS /* Define to 1 to use the `log4cxx' library (-llog4cxx) for logging. */ #undef PION_USE_LOG4CXX /* Define to 1 to use the `log4cpp' library (-llog4cpp) for logging. */ #undef PION_USE_LOG4CPP /* Define to 1 to disable logging. */ #undef PION_DISABLE_LOGGING // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #undef PION_HAVE_ZLIB /* Define to 1 if you have the `bzlib' library. */ #undef PION_HAVE_BZLIB /* Define to 1 if you have the `OpenSSL' library. */ #undef PION_HAVE_SSL /* This is used by Windows projects to flag exported symbols */ #define PION_API #define PION_PLUGIN #endif pion-5.0.6+dfsg.orig/include/pion/http/0000755000372000001440000000000012314121442017300 5ustar robertouserspion-5.0.6+dfsg.orig/include/pion/http/message.hpp0000644000372000001440000006443512314121350021447 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_MESSAGE_HEADER__ #define __PION_HTTP_MESSAGE_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #ifndef BOOST_SYSTEM_NOEXCEPT #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT #endif namespace pion { // begin namespace pion namespace tcp { // forward declaration for class used by send() and receive() class connection; } namespace http { // begin namespace http // forward declaration of parser class class parser; /// /// message: base container for HTTP messages /// class PION_API message : public http::types { public: /// data type for I/O write buffers (these wrap existing data to be sent) typedef std::vector write_buffers_t; /// used to cache chunked data typedef std::vector chunk_cache_t; /// data type for library errors returned during receive() operations struct receive_error_t : public boost::system::error_category { virtual ~receive_error_t() {} virtual inline const char *name() const BOOST_SYSTEM_NOEXCEPT { return "receive_error_t"; } virtual inline std::string message(int ev) const { std::string result; switch(ev) { case 1: result = "HTTP message parsing error"; break; default: result = "Unknown receive error"; break; } return result; } }; /// defines message data integrity status codes enum data_status_t { STATUS_NONE, // no data received (i.e. all lost) STATUS_TRUNCATED, // one or more missing packets at the end STATUS_PARTIAL, // one or more missing packets but NOT at the end STATUS_OK // no missing packets }; /// constructs a new HTTP message object message(void) : m_is_valid(false), m_is_chunked(false), m_chunks_supported(false), m_do_not_send_content_length(false), m_version_major(1), m_version_minor(1), m_content_length(0), m_content_buf(), m_status(STATUS_NONE), m_has_missing_packets(false), m_has_data_after_missing(false) {} /// copy constructor message(const message& http_msg) : m_first_line(http_msg.m_first_line), m_is_valid(http_msg.m_is_valid), m_is_chunked(http_msg.m_is_chunked), m_chunks_supported(http_msg.m_chunks_supported), m_do_not_send_content_length(http_msg.m_do_not_send_content_length), m_remote_ip(http_msg.m_remote_ip), m_version_major(http_msg.m_version_major), m_version_minor(http_msg.m_version_minor), m_content_length(http_msg.m_content_length), m_content_buf(http_msg.m_content_buf), m_chunk_cache(http_msg.m_chunk_cache), m_headers(http_msg.m_headers), m_status(http_msg.m_status), m_has_missing_packets(http_msg.m_has_missing_packets), m_has_data_after_missing(http_msg.m_has_data_after_missing) {} /// assignment operator inline message& operator=(const message& http_msg) { m_first_line = http_msg.m_first_line; m_is_valid = http_msg.m_is_valid; m_is_chunked = http_msg.m_is_chunked; m_chunks_supported = http_msg.m_chunks_supported; m_do_not_send_content_length = http_msg.m_do_not_send_content_length; m_remote_ip = http_msg.m_remote_ip; m_version_major = http_msg.m_version_major; m_version_minor = http_msg.m_version_minor; m_content_length = http_msg.m_content_length; m_content_buf = http_msg.m_content_buf; m_chunk_cache = http_msg.m_chunk_cache; m_headers = http_msg.m_headers; m_status = http_msg.m_status; m_has_missing_packets = http_msg.m_has_missing_packets; m_has_data_after_missing = http_msg.m_has_data_after_missing; return *this; } /// virtual destructor virtual ~message() {} /// clears all message data virtual void clear(void) { clear_first_line(); m_is_valid = m_is_chunked = m_chunks_supported = m_do_not_send_content_length = false; m_remote_ip = boost::asio::ip::address_v4(0); m_version_major = m_version_minor = 1; m_content_length = 0; m_content_buf.clear(); m_chunk_cache.clear(); m_headers.clear(); m_cookie_params.clear(); m_status = STATUS_NONE; m_has_missing_packets = false; m_has_data_after_missing = false; } /// should return true if the content length can be implied without headers virtual bool is_content_length_implied(void) const = 0; /// returns true if the message is valid inline bool is_valid(void) const { return m_is_valid; } /// returns true if chunked transfer encodings are supported inline bool get_chunks_supported(void) const { return m_chunks_supported; } /// returns IP address of the remote endpoint inline boost::asio::ip::address& get_remote_ip(void) { return m_remote_ip; } /// returns the major HTTP version number inline boost::uint16_t get_version_major(void) const { return m_version_major; } /// returns the minor HTTP version number inline boost::uint16_t get_version_minor(void) const { return m_version_minor; } /// returns a string representation of the HTTP version (i.e. "HTTP/1.1") inline std::string get_version_string(void) const { std::string http_version(STRING_HTTP_VERSION); http_version += boost::lexical_cast(get_version_major()); http_version += '.'; http_version += boost::lexical_cast(get_version_minor()); return http_version; } /// returns the length of the payload content (in bytes) inline size_t get_content_length(void) const { return m_content_length; } /// returns true if the message content is chunked inline bool is_chunked(void) const { return m_is_chunked; } /// returns true if buffer for content is allocated bool is_content_buffer_allocated() const { return !m_content_buf.is_empty(); } /// returns size of allocated buffer inline std::size_t get_content_buffer_size() const { return m_content_buf.size(); } /// returns a pointer to the payload content, or empty string if there is none inline char *get_content(void) { return m_content_buf.get(); } /// returns a const pointer to the payload content, or empty string if there is none inline const char *get_content(void) const { return m_content_buf.get(); } /// returns a reference to the chunk cache inline chunk_cache_t& get_chunk_cache(void) { return m_chunk_cache; } /// returns a value for the header if any are defined; otherwise, an empty string inline const std::string& get_header(const std::string& key) const { return get_value(m_headers, key); } /// returns a reference to the HTTP headers inline ihash_multimap& get_headers(void) { return m_headers; } /// returns true if at least one value for the header is defined inline bool has_header(const std::string& key) const { return(m_headers.find(key) != m_headers.end()); } /// returns a value for the cookie if any are defined; otherwise, an empty string /// since cookie names are insensitive, key should use lowercase alpha chars inline const std::string& get_cookie(const std::string& key) const { return get_value(m_cookie_params, key); } /// returns the cookie parameters inline ihash_multimap& get_cookies(void) { return m_cookie_params; } /// returns true if at least one value for the cookie is defined /// since cookie names are insensitive, key should use lowercase alpha chars inline bool has_cookie(const std::string& key) const { return(m_cookie_params.find(key) != m_cookie_params.end()); } /// adds a value for the cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void add_cookie(const std::string& key, const std::string& value) { m_cookie_params.insert(std::make_pair(key, value)); } /// changes the value of a cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void change_cookie(const std::string& key, const std::string& value) { change_value(m_cookie_params, key, value); } /// removes all values for a cookie /// since cookie names are insensitive, key should use lowercase alpha chars inline void delete_cookie(const std::string& key) { delete_value(m_cookie_params, key); } /// returns a string containing the first line for the HTTP message inline const std::string& get_first_line(void) const { if (m_first_line.empty()) update_first_line(); return m_first_line; } /// true if there were missing packets inline bool has_missing_packets() const { return m_has_missing_packets; } /// set to true when missing packets detected inline void set_missing_packets(bool newVal) { m_has_missing_packets = newVal; } /// true if more data seen after the missing packets inline bool has_data_after_missing_packets() const { return m_has_data_after_missing; } inline void set_data_after_missing_packet(bool newVal) { m_has_data_after_missing = newVal; } /// sets whether or not the message is valid inline void set_is_valid(bool b = true) { m_is_valid = b; } /// set to true if chunked transfer encodings are supported inline void set_chunks_supported(bool b) { m_chunks_supported = b; } /// sets IP address of the remote endpoint inline void set_remote_ip(const boost::asio::ip::address& ip) { m_remote_ip = ip; } /// sets the major HTTP version number inline void set_version_major(const boost::uint16_t n) { m_version_major = n; clear_first_line(); } /// sets the minor HTTP version number inline void set_version_minor(const boost::uint16_t n) { m_version_minor = n; clear_first_line(); } /// sets the length of the payload content (in bytes) inline void set_content_length(size_t n) { m_content_length = n; } /// if called, the content-length will not be sent in the HTTP headers inline void set_do_not_send_content_length(void) { m_do_not_send_content_length = true; } /// return the data receival status inline data_status_t get_status() const { return m_status; } /// inline void set_status(data_status_t newVal) { m_status = newVal; } /// sets the length of the payload content using the Content-Length header inline void update_content_length_using_header(void) { ihash_multimap::const_iterator i = m_headers.find(HEADER_CONTENT_LENGTH); if (i == m_headers.end()) { m_content_length = 0; } else { std::string trimmed_length(i->second); boost::algorithm::trim(trimmed_length); m_content_length = boost::lexical_cast(trimmed_length); } } /// sets the transfer coding using the Transfer-Encoding header inline void update_transfer_encoding_using_header(void) { m_is_chunked = false; ihash_multimap::const_iterator i = m_headers.find(HEADER_TRANSFER_ENCODING); if (i != m_headers.end()) { // From RFC 2616, sec 3.6: All transfer-coding values are case-insensitive. m_is_chunked = boost::regex_match(i->second, REGEX_ICASE_CHUNKED); // ignoring other possible values for now } } ///creates a payload content buffer of size m_content_length and returns /// a pointer to the new buffer (memory is managed by message class) inline char *create_content_buffer(void) { m_content_buf.resize(m_content_length); return m_content_buf.get(); } /// resets payload content to match the value of a string inline void set_content(const std::string& content) { set_content_length(content.size()); create_content_buffer(); memcpy(m_content_buf.get(), content.c_str(), content.size()); } /// clears payload content buffer inline void clear_content(void) { set_content_length(0); create_content_buffer(); delete_value(m_headers, HEADER_CONTENT_TYPE); } /// sets the content type for the message payload inline void set_content_type(const std::string& type) { change_value(m_headers, HEADER_CONTENT_TYPE, type); } /// adds a value for the HTTP header named key inline void add_header(const std::string& key, const std::string& value) { m_headers.insert(std::make_pair(key, value)); } /// changes the value for the HTTP header named key inline void change_header(const std::string& key, const std::string& value) { change_value(m_headers, key, value); } /// removes all values for the HTTP header named key inline void delete_header(const std::string& key) { delete_value(m_headers, key); } /// returns true if the HTTP connection may be kept alive inline bool check_keep_alive(void) const { return (get_header(HEADER_CONNECTION) != "close" && (get_version_major() > 1 || (get_version_major() >= 1 && get_version_minor() >= 1)) ); } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize * @param keep_alive true if the connection should be kept alive * @param using_chunks true if the payload content will be sent in chunks */ inline void prepare_buffers_for_send(write_buffers_t& write_buffers, const bool keep_alive, const bool using_chunks) { // update message headers prepare_headers_for_send(keep_alive, using_chunks); // add first message line write_buffers.push_back(boost::asio::buffer(get_first_line())); write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); // append cookie headers (if any) append_cookie_headers(); // append HTTP headers append_headers(write_buffers); } /** * sends the message over a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the send fails * @param headers_only if true then only HTTP headers are sent * * @return std::size_t number of bytes written to the connection */ std::size_t send(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only = false); /** * receives a new message from a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the receive fails * @param http_parser http parser object to use * * @return std::size_t number of bytes read from the connection */ std::size_t receive(tcp::connection& tcp_conn, boost::system::error_code& ec, parser& http_parser); /** * receives a new message from a TCP connection (blocks until finished) * * @param tcp_conn TCP connection to use * @param ec contains error code if the receive fails * @param headers_only if true then only HTTP headers are received * @param max_content_length maximum number of content bytes received * * @return std::size_t number of bytes read from the connection */ std::size_t receive(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only = false, std::size_t max_content_length = static_cast(-1)); /** * writes the message to a std::ostream (blocks until finished) * * @param out std::ostream to use * @param ec contains error code if the write fails * @param headers_only if true then only HTTP headers are written * * @return std::size_t number of bytes written to the connection */ std::size_t write(std::ostream& out, boost::system::error_code& ec, bool headers_only = false); /** * reads a new message from a std::istream (blocks until finished) * * @param in std::istream to use * @param ec contains error code if the read fails * @param http_parser http parser object to use * * @return std::size_t number of bytes read from the connection */ std::size_t read(std::istream& in, boost::system::error_code& ec, parser& http_parser); /** * reads a new message from a std::istream (blocks until finished) * * @param in std::istream to use * @param ec contains error code if the read fails * @param headers_only if true then only HTTP headers are read * @param max_content_length maximum number of content bytes received * * @return std::size_t number of bytes read from the connection */ std::size_t read(std::istream& in, boost::system::error_code& ec, bool headers_only = false, std::size_t max_content_length = static_cast(-1)); /** * pieces together all the received chunks */ void concatenate_chunks(void); protected: /// a simple helper class used to manage a fixed-size payload content buffer class content_buffer_t { public: /// simple destructor ~content_buffer_t() {} /// default constructor content_buffer_t() : m_buf(), m_len(0), m_empty(0), m_ptr(&m_empty) {} /// copy constructor content_buffer_t(const content_buffer_t& buf) : m_buf(), m_len(0), m_empty(0), m_ptr(&m_empty) { if (buf.size()) { resize(buf.size()); memcpy(get(), buf.get(), buf.size()); } } /// assignment operator content_buffer_t& operator=(const content_buffer_t& buf) { if (buf.size()) { resize(buf.size()); memcpy(get(), buf.get(), buf.size()); } else { clear(); } return *this; } /// returns true if buffer is empty inline bool is_empty() const { return m_len == 0; } /// returns size in bytes inline std::size_t size() const { return m_len; } /// returns const pointer to data inline const char *get() const { return m_ptr; } /// returns mutable pointer to data inline char *get() { return m_ptr; } /// changes the size of the content buffer inline void resize(std::size_t len) { m_len = len; if (len == 0) { m_buf.reset(); m_ptr = &m_empty; } else { m_buf.reset(new char[len+1]); m_buf[len] = '\0'; m_ptr = m_buf.get(); } } /// clears the content buffer inline void clear() { resize(0); } private: boost::scoped_array m_buf; std::size_t m_len; char m_empty; char *m_ptr; }; /** * prepares HTTP headers for a send operation * * @param keep_alive true if the connection should be kept alive * @param using_chunks true if the payload content will be sent in chunks */ inline void prepare_headers_for_send(const bool keep_alive, const bool using_chunks) { change_header(HEADER_CONNECTION, (keep_alive ? "Keep-Alive" : "close") ); if (using_chunks) { if (get_chunks_supported()) change_header(HEADER_TRANSFER_ENCODING, "chunked"); } else if (! m_do_not_send_content_length) { change_header(HEADER_CONTENT_LENGTH, boost::lexical_cast(get_content_length())); } } /** * appends the message's HTTP headers to a vector of write buffers * * @param write_buffers the buffers to append HTTP headers into */ inline void append_headers(write_buffers_t& write_buffers) { // add HTTP headers for (ihash_multimap::const_iterator i = m_headers.begin(); i != m_headers.end(); ++i) { write_buffers.push_back(boost::asio::buffer(i->first)); write_buffers.push_back(boost::asio::buffer(HEADER_NAME_VALUE_DELIMITER)); write_buffers.push_back(boost::asio::buffer(i->second)); write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); } // add an extra CRLF to end HTTP headers write_buffers.push_back(boost::asio::buffer(STRING_CRLF)); } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) {} /** * Returns the first value in a dictionary if key is found; or an empty * string if no values are found * * @param dict the dictionary to search for key * @param key the key to search for * @return value if found; empty string if not */ template inline static const std::string& get_value(const DictionaryType& dict, const std::string& key) { typename DictionaryType::const_iterator i = dict.find(key); return ( (i==dict.end()) ? STRING_EMPTY : i->second ); } /** * Changes the value for a dictionary key. Adds the key if it does not * already exist. If multiple values exist for the key, they will be * removed and only the new value will remain. * * @param dict the dictionary object to update * @param key the key to change the value for * @param value the value to assign to the key */ template inline static void change_value(DictionaryType& dict, const std::string& key, const std::string& value) { // retrieve all current values for key std::pair result_pair = dict.equal_range(key); if (result_pair.first == dict.end()) { // no values exist -> add a new key dict.insert(std::make_pair(key, value)); } else { // set the first value found for the key to the new one result_pair.first->second = value; // remove any remaining values typename DictionaryType::iterator i; ++(result_pair.first); while (result_pair.first != result_pair.second) { i = result_pair.first; ++(result_pair.first); dict.erase(i); } } } /** * Deletes all values for a key * * @param dict the dictionary object to update * @param key the key to delete */ template inline static void delete_value(DictionaryType& dict, const std::string& key) { std::pair result_pair = dict.equal_range(key); if (result_pair.first != dict.end()) dict.erase(result_pair.first, result_pair.second); } /// erases the string containing the first line for the HTTP message /// (it will be updated the next time get_first_line() is called) inline void clear_first_line(void) const { if (! m_first_line.empty()) m_first_line.clear(); } /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const = 0; /// first line sent in an HTTP message /// (i.e. "GET / HTTP/1.1" for request, or "HTTP/1.1 200 OK" for response) mutable std::string m_first_line; private: /// Regex used to check for the "chunked" transfer encoding header static const boost::regex REGEX_ICASE_CHUNKED; /// True if the HTTP message is valid bool m_is_valid; /// whether the message body is chunked bool m_is_chunked; /// true if chunked transfer encodings are supported bool m_chunks_supported; /// if true, the content length will not be sent in the HTTP headers bool m_do_not_send_content_length; /// IP address of the remote endpoint boost::asio::ip::address m_remote_ip; /// HTTP major version number boost::uint16_t m_version_major; /// HTTP major version number boost::uint16_t m_version_minor; /// the length of the payload content (in bytes) size_t m_content_length; /// the payload content, if any was sent with the message content_buffer_t m_content_buf; /// buffers for holding chunked data chunk_cache_t m_chunk_cache; /// HTTP message headers ihash_multimap m_headers; /// HTTP cookie parameters parsed from the headers ihash_multimap m_cookie_params; /// message data integrity status data_status_t m_status; /// missing packet indicator bool m_has_missing_packets; /// indicates missing packets in the middle of the data stream bool m_has_data_after_missing; }; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/request_reader.hpp0000644000372000001440000001022512314121350023021 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_READER_HEADER__ #define __PION_HTTP_REQUEST_READER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request_reader: asynchronously reads and parses HTTP requests /// class request_reader : public http::reader, public boost::enable_shared_from_this { public: /// function called after the HTTP message has been parsed typedef boost::function3 finished_handler_t; // default destructor virtual ~request_reader() {} /** * creates new request_reader objects * * @param tcp_conn TCP connection containing a new message to parse * @param handler function called after the message has been parsed */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, finished_handler_t handler) { return boost::shared_ptr (new request_reader(tcp_conn, handler)); } /// sets a function to be called after HTTP headers have been parsed inline void set_headers_parsed_callback(finished_handler_t& h) { m_parsed_headers = h; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection containing a new message to parse * @param handler function called after the message has been parsed */ request_reader(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : http::reader(true, tcp_conn), m_http_msg(new http::request), m_finished(handler) { m_http_msg->set_remote_ip(tcp_conn->get_remote_ip()); set_logger(PION_GET_LOGGER("pion.http.request_reader")); } /// Reads more bytes from the TCP connection virtual void read_bytes(void) { get_connection()->async_read_some(boost::bind(&request_reader::consume_bytes, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) { // call the finished headers handler with the HTTP message if (m_parsed_headers) m_parsed_headers(m_http_msg, get_connection(), ec); } /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) { // call the finished handler with the finished HTTP message if (m_finished) m_finished(m_http_msg, get_connection(), ec); } /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) { return *m_http_msg; } /// The new HTTP message container being created http::request_ptr m_http_msg; /// function called after the HTTP message has been parsed finished_handler_t m_finished; /// function called after the HTTP message headers have been parsed finished_handler_t m_parsed_headers; }; /// data type for a request_reader pointer typedef boost::shared_ptr request_reader_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/basic_auth.hpp0000644000372000001440000000654312314121350022121 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_BASIC_AUTH_HEADER__ #define __PION_HTTP_BASIC_AUTH_HEADER__ #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// basic_auth: a base class for handling HTTP Authentication and session management /// in accordance with RFC 2617 http://tools.ietf.org/html/rfc2617 /// class PION_API basic_auth : public http::auth { public: /// default constructor basic_auth(user_manager_ptr userManager, const std::string& realm="PION"); /// virtual destructor virtual ~basic_auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * sets a configuration option * Valid options: * - "domain" - name of authentication domain * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value); protected: /** * used to send responses when access to resource is not authorized * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * extracts base64 user credentials from authorization string * * @param authorization value of the HEADER_AUTHORIZATION */ static bool parse_authorization(std::string const &authorization, std::string &credentials); /** * parse base64 credentials and extract username/password */ static bool parse_credentials(std::string const &credentials, std::string &username, std::string &password); private: /// number of seconds after which entires in the user cache will be expired static const unsigned int CACHE_EXPIRATION; /// authentication realm ( "PION" by default) std::string m_realm; /// time of the last cache clean up boost::posix_time::ptime m_cache_cleanup_time; /// cache of users that are currently active user_cache_type m_user_cache; /// mutex used to protect access to the user cache mutable boost::mutex m_cache_mutex; }; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/response.hpp0000644000372000001440000002102612314121350021646 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_HEADER__ #define __PION_HTTP_RESPONSE_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response: container for HTTP response information /// class response : public http::message { public: /** * constructs a new response object for a particular request * * @param http_request_ptr the request that this is responding to */ response(const http::request& http_request_ptr) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK) { update_request_info(http_request_ptr); } /** * constructs a new response object for a particular request method * * @param request_method the method used by the HTTP request we are responding to */ response(const std::string& request_method) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK), m_request_method(request_method) {} /// copy constructor response(const response& http_response) : message(http_response), m_status_code(http_response.m_status_code), m_status_message(http_response.m_status_message), m_request_method(http_response.m_request_method) {} /// default constructor: you are strongly encouraged to use one of the other /// constructors, since response parsing is influenced by the request method response(void) : m_status_code(RESPONSE_CODE_OK), m_status_message(RESPONSE_MESSAGE_OK) {} /// virtual destructor virtual ~response() {} /// clears all response data virtual void clear(void) { http::message::clear(); m_status_code = RESPONSE_CODE_OK; m_status_message = RESPONSE_MESSAGE_OK; m_request_method.clear(); } /// the content length may be implied for certain types of responses virtual bool is_content_length_implied(void) const { return (m_request_method == REQUEST_METHOD_HEAD // HEAD responses have no content || (m_status_code >= 100 && m_status_code <= 199) // 1xx responses have no content || m_status_code == 204 || m_status_code == 205 // no content & reset content responses || m_status_code == 304 // not modified responses have no content ); } /** * Updates HTTP request information for the response object (use * this if the response cannot be constructed using the request) * * @param http_request the request that this is responding to */ inline void update_request_info(const http::request& http_request) { m_request_method = http_request.get_method(); if (http_request.get_version_major() == 1 && http_request.get_version_minor() >= 1) { set_chunks_supported(true); } else if (http_request.get_version_major() == 0) { // the request is likely HTTP 0.9 "simple-request", so expect the response to contain no header and no version info set_status_code(0U); set_status_message(""); set_version_major(0); set_version_minor(0); } } /// sets the HTTP response status code inline void set_status_code(unsigned int n) { m_status_code = n; clear_first_line(); } /// sets the HTTP response status message inline void set_status_message(const std::string& msg) { m_status_message = msg; clear_first_line(); } /// returns the HTTP response status code inline unsigned int get_status_code(void) const { return m_status_code; } /// returns the HTTP response status message inline const std::string& get_status_message(void) const { return m_status_message; } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * the cookie will be discarded by the user-agent when it closes * * @param name the name of the cookie * @param value the value of the cookie */ inline void set_cookie(const std::string& name, const std::string& value) { std::string set_cookie_header(make_set_cookie_header(name, value, "/")); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * the cookie will be discarded by the user-agent when it closes * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie */ inline void set_cookie(const std::string& name, const std::string& value, const std::string& path) { std::string set_cookie_header(make_set_cookie_header(name, value, path)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie * @param max_age the life of the cookie, in seconds (0 = discard) */ inline void set_cookie(const std::string& name, const std::string& value, const std::string& path, const unsigned long max_age) { std::string set_cookie_header(make_set_cookie_header(name, value, path, true, max_age)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /** * sets a cookie by adding a Set-Cookie header (see RFC 2109) * * @param name the name of the cookie * @param value the value of the cookie * @param max_age the life of the cookie, in seconds (0 = discard) */ inline void set_cookie(const std::string& name, const std::string& value, const unsigned long max_age) { std::string set_cookie_header(make_set_cookie_header(name, value, "/", true, max_age)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// deletes cookie called name by adding a Set-Cookie header (cookie has no path) inline void delete_cookie(const std::string& name) { std::string set_cookie_header(make_set_cookie_header(name, "", "/", true, 0)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// deletes cookie called name by adding a Set-Cookie header (cookie has a path) inline void delete_cookie(const std::string& name, const std::string& path) { std::string set_cookie_header(make_set_cookie_header(name, "", path, true, 0)); add_header(HEADER_SET_COOKIE, set_cookie_header); } /// sets the time that the response was last modified (Last-Modified) inline void set_last_modified(const unsigned long t) { change_header(HEADER_LAST_MODIFIED, get_date_string(t)); } protected: /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const { // start out with the HTTP version m_first_line = get_version_string(); m_first_line += ' '; // append the response status code m_first_line += boost::lexical_cast(m_status_code); m_first_line += ' '; // append the response status message m_first_line += m_status_message; } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) { for (ihash_multimap::const_iterator i = get_cookies().begin(); i != get_cookies().end(); ++i) { set_cookie(i->first, i->second); } } private: /// The HTTP response status code unsigned int m_status_code; /// The HTTP response status message std::string m_status_message; /// HTTP method used by the request std::string m_request_method; }; /// data type for a HTTP response pointer typedef boost::shared_ptr response_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/Makefile.in0000644000372000001440000003717112314121377021365 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/http DIST_COMMON = $(pion_http_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_http_includedir)" HEADERS = $(pion_http_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_http_includedir = $(includedir)/pion/http pion_http_include_HEADERS = \ auth.hpp basic_auth.hpp cookie_auth.hpp message.hpp parser.hpp \ plugin_server.hpp plugin_service.hpp reader.hpp request.hpp \ request_reader.hpp request_writer.hpp response.hpp response_reader.hpp \ response_writer.hpp server.hpp types.hpp writer.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/http/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/http/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_http_includeHEADERS: $(pion_http_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_http_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_http_includedir)" @list='$(pion_http_include_HEADERS)'; test -n "$(pion_http_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_http_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_http_includedir)" || exit $$?; \ done uninstall-pion_http_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_http_include_HEADERS)'; test -n "$(pion_http_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_http_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_http_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_http_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_http_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_http_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_http_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_http_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/http/plugin_service.hpp0000644000372000001440000000755412314121350023040 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_SERVICE_HEADER__ #define __PION_PLUGIN_SERVICE_HEADER__ #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// plugin_service: interface class for web services /// class plugin_service : private boost::noncopyable { public: /// default constructor plugin_service(void) {} /// virtual destructor virtual ~plugin_service() {} /** * attempts to handle a new HTTP request * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ virtual void operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) = 0; /** * sets a configuration option * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value) { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } /// called when the web service's server is starting virtual void start(void) {} /// called when the web service's server is stopping virtual void stop(void) {} /// sets the URI stem or resource that is bound to the web service inline void set_resource(const std::string& str) { m_resource = str; } /// returns the URI stem or resource that is bound to the web service inline const std::string& get_resource(void) const { return m_resource; } /// returns the path to the resource requested, relative to the web service's location inline std::string get_relative_resource(const std::string& resource_requested) const { if (resource_requested.size() <= get_resource().size()) { // either the request matches the web service's resource path (a directory) // or the request does not match (should never happen) return std::string(); } // strip the web service's resource path plus the slash after it return algorithm::url_decode(resource_requested.substr(get_resource().size() + 1)); } private: /// the URI stem or resource that is bound to the web service std::string m_resource; }; // // The following symbols must be defined for any web service that you would // like to be able to load dynamically using the http::server::load_service() // function. These are not required for any services that you only want to link // directly into your programs. // // Make sure that you replace "MyPluginName" with the name of your derived class. // This name must also match the name of the object file (excluding the // extension). These symbols must be linked into your service's object file, // not included in any headers that it may use (declarations are OK in headers // but not the definitions). // // The "pion_create" function is used to create new instances of your service. // The "pion_destroy" function is used to destroy instances of your service. // // extern "C" MyPluginName *pion_create_MyPluginName(void) { // return new MyPluginName; // } // // extern "C" void pion_destroy_MyPluginName(MyPluginName *service_ptr) { // delete service_ptr; // } // } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/response_writer.hpp0000644000372000001440000001644512314121350023253 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_WRITER_HEADER__ #define __PION_HTTP_RESPONSE_WRITER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response_writer: used to asynchronously send HTTP responses /// class PION_API response_writer : public http::writer, public boost::enable_shared_from_this { public: /// default destructor virtual ~response_writer() {} /** * creates new response_writer objects * * @param tcp_conn TCP connection used to send the response * @param http_response pointer to the response that will be sent * @param handler function called after the response has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, http::response_ptr& http_response_ptr, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new response_writer(tcp_conn, http_response_ptr, handler)); } /** * creates new response_writer objects * * @param tcp_conn TCP connection used to send the response * @param http_request the request we are responding to * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new response_writer(tcp_conn, http_request, handler)); } /// returns a non-const reference to the response that will be sent inline http::response& get_response(void) { return *m_http_response; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the response * @param http_response pointer to the response that will be sent * @param handler function called after the request has been sent */ response_writer(tcp::connection_ptr& tcp_conn, http::response_ptr& http_response_ptr, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_response(http_response_ptr) { set_logger(PION_GET_LOGGER("pion.http.response_writer")); // tell the http::writer base class whether or not the client supports chunks supports_chunked_messages(m_http_response->get_chunks_supported()); // check if we should initialize the payload content using // the response's content buffer if (m_http_response->get_content_length() > 0 && m_http_response->get_content() != NULL && m_http_response->get_content()[0] != '\0') { write_no_copy(m_http_response->get_content(), m_http_response->get_content_length()); } } /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the response * @param http_request the request we are responding to * @param handler function called after the request has been sent */ response_writer(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_response(new http::response(http_request)) { set_logger(PION_GET_LOGGER("pion.http.response_writer")); // tell the http::writer base class whether or not the client supports chunks supports_chunked_messages(m_http_response->get_chunks_supported()); } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) { if (get_content_length() > 0) m_http_response->set_content_length(get_content_length()); m_http_response->prepare_buffers_for_send(write_buffers, get_connection()->get_keep_alive(), sending_chunked_message()); } /// returns a function bound to http::writer::handle_write() virtual write_handler_t bind_to_write_handler(void) { return boost::bind(&response_writer::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred); } /** * called after the response is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { logger log_ptr(get_logger()); if (!write_error) { // response sent OK if (sending_chunked_message()) { PION_LOG_DEBUG(log_ptr, "Sent HTTP response chunk of " << bytes_written << " bytes"); } else { PION_LOG_DEBUG(log_ptr, "Sent HTTP response of " << bytes_written << " bytes (" << (get_connection()->get_keep_alive() ? "keeping alive)" : "closing)")); } } finished_writing(write_error); } private: /// the response that will be sent http::response_ptr m_http_response; /// the initial HTTP response header line std::string m_response_line; }; /// data type for a response_writer pointer typedef boost::shared_ptr response_writer_ptr; /// override operator<< for convenience template const response_writer_ptr& operator<<(const response_writer_ptr& writer, const T& data) { writer->write(data); return writer; } inline response_writer_ptr& operator<<(response_writer_ptr& writer, std::ostream& (*iomanip)(std::ostream&)) { writer->write(iomanip); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/reader.hpp0000644000372000001440000000667312314121350021265 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_READER_HEADER__ #define __PION_HTTP_READER_HEADER__ #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// reader: asynchronously reads and parses HTTP messages /// class PION_API reader : public http::parser { public: // default destructor virtual ~reader() {} /// Incrementally reads & parses the HTTP message void receive(void); /// returns a shared pointer to the TCP connection inline tcp::connection_ptr& get_connection(void) { return m_tcp_conn; } /// sets the maximum number of seconds for read operations inline void set_timeout(boost::uint32_t seconds) { m_read_timeout = seconds; } protected: /** * protected constructor: only derived classes may create objects * * @param is_request if true, the message is parsed as an HTTP request; * if false, the message is parsed as an HTTP response * @param tcp_conn TCP connection containing a new message to parse */ reader(const bool is_request, tcp::connection_ptr& tcp_conn) : http::parser(is_request), m_tcp_conn(tcp_conn), m_read_timeout(DEFAULT_READ_TIMEOUT) {} /** * Consumes bytes that have been read using an HTTP parser * * @param read_error error status from the last read operation * @param bytes_read number of bytes consumed by the last read operation */ void consume_bytes(const boost::system::error_code& read_error, std::size_t bytes_read); /// Consumes bytes that have been read using an HTTP parser void consume_bytes(void); /// Reads more bytes from the TCP connection virtual void read_bytes(void) = 0; /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) = 0; /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) = 0; private: /// reads more bytes for parsing, with timeout support void read_bytes_with_timeout(void); /** * Handles errors that occur during read operations * * @param read_error error status from the last read operation */ void handle_read_error(const boost::system::error_code& read_error); /// default maximum number of seconds for read operations static const boost::uint32_t DEFAULT_READ_TIMEOUT; /// The HTTP connection that has a new HTTP message to parse tcp::connection_ptr m_tcp_conn; /// pointer to a tcp::timer object if read timeouts are enabled tcp::timer_ptr m_timer_ptr; /// maximum number of seconds for read operations boost::uint32_t m_read_timeout; }; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/cookie_auth.hpp0000644000372000001440000001454612314121350022313 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_COOKIE_AUTH_HEADER__ #define __PION_HTTP_COOKIE_AUTH_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// cookie_auth: handles HTTP authentication and session management in /// accordance with RFC 2617 (http://tools.ietf.org/html/rfc2617 ) using cookies. /// class PION_API cookie_auth : public http::auth { public: /** * default constructor * * @param userManager * @param login - URL resource for login request. Typical login request has format: * http://website/login?user="username"&pass="password"&url="redirection_url" * @param logout - URL resource for logout request. Typical logout request has format: * http://website/logout?url="redirection_url" * @param redirect - if not empty, URL for redirection in case of authentication failure * if empty - send code 401 on authentication failure */ cookie_auth(user_manager_ptr userManager, const std::string& login="/login", const std::string& logout="/logout", const std::string& redirect=""); /// virtual destructor virtual ~cookie_auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * Note: if request matches "login" resource, then login sequences attempted. * If "name" and "pass" attributes match user definition, a random cookie is created * and associated with given user session. If request contains "url" attribute, * then page redirection response returned. Otherwise - empty 204 response. * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * sets a configuration option * Valid options: * - "login" - URL resource for login request. Typical login request has format: * http://website/login?user="username"&pass="password"&url="redirection_url" * - "logout" - URL resource for logout request. Typical logout request has format: * http://website/logout?url="redirection_url" * - "redirect" - if not empty, URL for redirection in case of authentication failure * if empty - send code 401 on authentication failure * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value); protected: /** * check if given request is a login/logout and process it * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if it was a login/logout request and no future processing required. */ bool process_login(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when access to resource is not authorized * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send redirection responses * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_redirection(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false); /** * used to send OK responses with new cookie * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ void handle_ok(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &new_cookie="", bool delete_cookie=false); /** * Cache expiration cleanup. (Call it periodically) */ void expire_cache(const boost::posix_time::ptime &time_now); private: /// number of seconds after which entries in the user cache will be expired static const unsigned int CACHE_EXPIRATION; /// number of random bytes to use for cookie generation static const unsigned int RANDOM_COOKIE_BYTES; /// name of cookie used for authentication static const std::string AUTH_COOKIE_NAME; /// value of "login" resource std::string m_login; /// value of "logout" resource std::string m_logout; /// value of "redirection" resource std::string m_redirect; /// random number generator used for cookie generation boost::mt19937 m_random_gen; /// random number range used for cookie generation boost::uniform_int<> m_random_range; /// random dice that uses m_random_gen to produce ints within m_random_range boost::variate_generator > m_random_die; /// time of the last cache clean up boost::posix_time::ptime m_cache_cleanup_time; /// cache of users that are currently active user_cache_type m_user_cache; /// mutex used to protect access to the user cache mutable boost::mutex m_cache_mutex; }; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/writer.hpp0000644000372000001440000003356412314121350021336 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_WRITER_HEADER__ #define __PION_HTTP_WRITER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// writer: used to asynchronously send HTTP messages /// class PION_API writer : private boost::noncopyable { protected: /// function called after the HTTP message has been sent typedef boost::function1 finished_handler_t; /// data type for a function that handles write operations typedef boost::function2 write_handler_t; /** * protected constructor: only derived classes may create objects * * @param tcp_conn TCP connection used to send the message * @param handler function called after the request has been sent */ writer(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : m_logger(PION_GET_LOGGER("pion.http.writer")), m_tcp_conn(tcp_conn), m_content_length(0), m_stream_is_empty(true), m_client_supports_chunks(true), m_sending_chunks(false), m_sent_headers(false), m_finished(handler) {} /** * called after the message is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) = 0; /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) = 0; /// returns a function bound to writer::handle_write() virtual write_handler_t bind_to_write_handler(void) = 0; /// called after we have finished sending the HTTP message inline void finished_writing(const boost::system::error_code& ec) { if (m_finished) m_finished(ec); } public: /// default destructor virtual ~writer() {} /// clears out all of the memory buffers used to cache payload content data inline void clear(void) { m_content_buffers.clear(); m_binary_cache.clear(); m_text_cache.clear(); m_content_stream.str(""); m_stream_is_empty = true; m_content_length = 0; } /** * write text (non-binary) payload content * * @param data the data to append to the payload content */ template inline void write(const T& data) { m_content_stream << data; if (m_stream_is_empty) m_stream_is_empty = false; } inline void write(std::ostream& (*iomanip)(std::ostream&)) { m_content_stream << iomanip; if (m_stream_is_empty) m_stream_is_empty = false; } /** * write binary payload content * * @param data points to the binary data to append to the payload content * @param length the length, in bytes, of the binary data */ inline void write(const void *data, size_t length) { if (length != 0) { flush_content_stream(); m_content_buffers.push_back(m_binary_cache.add(data, length)); m_content_length += length; } } /** * write text (non-binary) payload content; the data written is not * copied, and therefore must persist until the message has finished * sending * * @param data the data to append to the payload content */ inline void write_no_copy(const std::string& data) { if (! data.empty()) { flush_content_stream(); m_content_buffers.push_back(boost::asio::buffer(data)); m_content_length += data.size(); } } /** * write binary payload content; the data written is not copied, and * therefore must persist until the message has finished sending * * @param data points to the binary data to append to the payload content * @param length the length, in bytes, of the binary data */ inline void write_no_copy(void *data, size_t length) { if (length > 0) { flush_content_stream(); m_content_buffers.push_back(boost::asio::buffer(data, length)); m_content_length += length; } } /** * Sends all data buffered as a single HTTP message (without chunking). * Following a call to this function, it is not thread safe to use your * reference to the writer object. */ inline void send(void) { send_more_data(false, bind_to_write_handler()); } /** * Sends all data buffered as a single HTTP message (without chunking). * Following a call to this function, it is not thread safe to use your * reference to the writer object until the send_handler has been called. * * @param send_handler function that is called after the message has been * sent to the client. Your callback function must end * the connection by calling connection::finish(). */ template inline void send(SendHandler send_handler) { send_more_data(false, send_handler); } /** * Sends all data buffered as a single HTTP chunk. Following a call to this * function, it is not thread safe to use your reference to the writer * object until the send_handler has been called. * * @param send_handler function that is called after the chunk has been sent * to the client. Your callback function must end by * calling one of send_chunk() or send_final_chunk(). Also, * be sure to clear() the writer before writing data to it. */ template inline void send_chunk(SendHandler send_handler) { m_sending_chunks = true; if (!supports_chunked_messages()) { // sending data in chunks, but the client does not support chunking; // make sure that the connection will be closed when we are all done m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); } // send more data send_more_data(false, send_handler); } /** * Sends all data buffered (if any) and also sends the final HTTP chunk. * This function (either overloaded version) must be called following any * calls to send_chunk(). * Following a call to this function, it is not thread safe to use your * reference to the writer object until the send_handler has been called. * * @param send_handler function that is called after the message has been * sent to the client. Your callback function must end * the connection by calling connection::finish(). */ template inline void send_final_chunk(SendHandler send_handler) { m_sending_chunks = true; send_more_data(true, send_handler); } /** * Sends all data buffered (if any) and also sends the final HTTP chunk. * This function (either overloaded version) must be called following any * calls to send_chunk(). * Following a call to this function, it is not thread safe to use your * reference to the writer object. */ inline void send_final_chunk(void) { m_sending_chunks = true; send_more_data(true, bind_to_write_handler()); } /// returns a shared pointer to the TCP connection inline tcp::connection_ptr& get_connection(void) { return m_tcp_conn; } /// returns the length of the payload content (in bytes) inline size_t get_content_length(void) const { return m_content_length; } /// sets whether or not the client supports chunked messages inline void supports_chunked_messages(bool b) { m_client_supports_chunks = b; } /// returns true if the client supports chunked messages inline bool supports_chunked_messages() const { return m_client_supports_chunks; } /// returns true if we are sending a chunked message to the client inline bool sending_chunked_message() const { return m_sending_chunks; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } private: /** * sends all of the buffered data to the client * * @param send_final_chunk true if the final 0-byte chunk should be included * @param send_handler function called after the data has been sent */ template inline void send_more_data(const bool send_final_chunk, SendHandler send_handler) { // make sure that we did not lose the TCP connection if (m_tcp_conn->is_open()) { // make sure that the content-length is up-to-date flush_content_stream(); // prepare the write buffers to be sent http::message::write_buffers_t write_buffers; prepare_write_buffers(write_buffers, send_final_chunk); // send data in the write buffers m_tcp_conn->async_write(write_buffers, send_handler); } else { finished_writing(boost::asio::error::connection_reset); } } /** * prepares write_buffers for next send operation * * @param write_buffers buffers to which data will be appended * @param send_final_chunk true if the final 0-byte chunk should be included */ void prepare_write_buffers(http::message::write_buffers_t &write_buffers, const bool send_final_chunk); /// flushes any text data in the content stream after caching it in the text_cache_t inline void flush_content_stream(void) { if (! m_stream_is_empty) { std::string string_to_add(m_content_stream.str()); if (! string_to_add.empty()) { m_content_stream.str(""); m_content_length += string_to_add.size(); m_text_cache.push_back(string_to_add); m_content_buffers.push_back(boost::asio::buffer(m_text_cache.back())); } m_stream_is_empty = true; } } /// used to cache binary data included within the payload content class binary_cache_t : public std::vector > { public: ~binary_cache_t() { for (iterator i=begin(); i!=end(); ++i) { delete[] i->first; } } inline boost::asio::const_buffer add(const void *ptr, const size_t size) { char *data_ptr = new char[size]; memcpy(data_ptr, ptr, size); push_back( std::make_pair(data_ptr, size) ); return boost::asio::buffer(data_ptr, size); } }; /// used to cache text (non-binary) data included within the payload content typedef std::list text_cache_t; /// primary logging interface used by this class logger m_logger; /// The HTTP connection that we are writing the message to tcp::connection_ptr m_tcp_conn; /// I/O write buffers that wrap the payload content to be written http::message::write_buffers_t m_content_buffers; /// caches binary data included within the payload content binary_cache_t m_binary_cache; /// caches text (non-binary) data included within the payload content text_cache_t m_text_cache; /// incrementally creates strings of text data for the text_cache_t std::ostringstream m_content_stream; /// The length (in bytes) of the response content to be sent (Content-Length) size_t m_content_length; /// true if the content_stream is empty (avoids unnecessary string copies) bool m_stream_is_empty; /// true if the HTTP client supports chunked transfer encodings bool m_client_supports_chunks; /// true if data is being sent to the client using multiple chunks bool m_sending_chunks; /// true if the HTTP message headers have already been sent bool m_sent_headers; /// function called after the HTTP message has been sent finished_handler_t m_finished; }; /// data type for a writer pointer typedef boost::shared_ptr writer_ptr; /// override operator<< for convenience template inline const writer_ptr& operator<<(const writer_ptr& writer, const T& data) { writer->write(data); return writer; } inline const writer_ptr& operator<<(const writer_ptr& writer, std::ostream& (*iomanip)(std::ostream&)) { writer->write(iomanip); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/parser.hpp0000644000372000001440000006665712314121350021327 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_PARSER_HEADER__ #define __PION_HTTP_PARSER_HEADER__ #include #include #include #include #include #include #include #include #include #ifndef BOOST_SYSTEM_NOEXCEPT #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT #endif namespace pion { // begin namespace pion namespace http { // begin namespace http // forward declarations used for finishing HTTP messages class request; class response; /// /// parser: parses HTTP messages /// class PION_API parser : private boost::noncopyable { public: /// maximum length for HTTP payload content static const std::size_t DEFAULT_CONTENT_MAX; /// callback type used to consume payload content typedef boost::function2 payload_handler_t; /// class-specific error code values enum error_value_t { ERROR_METHOD_CHAR = 1, ERROR_METHOD_SIZE, ERROR_URI_CHAR, ERROR_URI_SIZE, ERROR_QUERY_CHAR, ERROR_QUERY_SIZE, ERROR_VERSION_EMPTY, ERROR_VERSION_CHAR, ERROR_STATUS_EMPTY, ERROR_STATUS_CHAR, ERROR_HEADER_CHAR, ERROR_HEADER_NAME_SIZE, ERROR_HEADER_VALUE_SIZE, ERROR_INVALID_CONTENT_LENGTH, ERROR_CHUNK_CHAR, ERROR_MISSING_CHUNK_DATA, ERROR_MISSING_HEADER_DATA, ERROR_MISSING_TOO_MUCH_CONTENT, }; /// class-specific error category class error_category_t : public boost::system::error_category { public: const char *name() const BOOST_SYSTEM_NOEXCEPT { return "parser"; } std::string message(int ev) const { switch (ev) { case ERROR_METHOD_CHAR: return "invalid method character"; case ERROR_METHOD_SIZE: return "method exceeds maximum size"; case ERROR_URI_CHAR: return "invalid URI character"; case ERROR_URI_SIZE: return "method exceeds maximum size"; case ERROR_QUERY_CHAR: return "invalid query string character"; case ERROR_QUERY_SIZE: return "query string exceeds maximum size"; case ERROR_VERSION_EMPTY: return "HTTP version undefined"; case ERROR_VERSION_CHAR: return "invalid version character"; case ERROR_STATUS_EMPTY: return "HTTP status undefined"; case ERROR_STATUS_CHAR: return "invalid status character"; case ERROR_HEADER_CHAR: return "invalid header character"; case ERROR_HEADER_NAME_SIZE: return "header name exceeds maximum size"; case ERROR_HEADER_VALUE_SIZE: return "header value exceeds maximum size"; case ERROR_INVALID_CONTENT_LENGTH: return "invalid Content-Length header"; case ERROR_CHUNK_CHAR: return "invalid chunk character"; case ERROR_MISSING_HEADER_DATA: return "missing header data"; case ERROR_MISSING_CHUNK_DATA: return "missing chunk data"; case ERROR_MISSING_TOO_MUCH_CONTENT: return "missing too much content"; } return "parser error"; } }; /** * creates new parser objects * * @param is_request if true, the message is parsed as an HTTP request; * if false, the message is parsed as an HTTP response * @param max_content_length maximum length for HTTP payload content */ parser(const bool is_request, std::size_t max_content_length = DEFAULT_CONTENT_MAX) : m_logger(PION_GET_LOGGER("pion.http.parser")), m_is_request(is_request), m_read_ptr(NULL), m_read_end_ptr(NULL), m_message_parse_state(PARSE_START), m_headers_parse_state(is_request ? PARSE_METHOD_START : PARSE_HTTP_VERSION_H), m_chunked_content_parse_state(PARSE_CHUNK_SIZE_START), m_status_code(0), m_bytes_content_remaining(0), m_bytes_content_read(0), m_bytes_last_read(0), m_bytes_total_read(0), m_max_content_length(max_content_length), m_parse_headers_only(false), m_save_raw_headers(false) {} /// default destructor virtual ~parser() {} /** * parses an HTTP message including all payload content it might contain * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message, * indeterminate = not yet finished parsing HTTP message */ boost::tribool parse(http::message& http_msg, boost::system::error_code& ec); /** * attempts to continue parsing despite having missed data (length is known but content is not) * * @param http_msg the HTTP message object to populate from parsing * @param len the length in bytes of the missing data * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message, * indeterminate = not yet finished parsing HTTP message */ boost::tribool parse_missing_data(http::message& http_msg, std::size_t len, boost::system::error_code& ec); /** * finishes parsing an HTTP response message * * @param http_msg the HTTP message object to finish */ void finish(http::message& http_msg) const; /** * resets the location and size of the read buffer * * @param ptr pointer to the first bytes available to be read * @param len number of bytes available to be read */ inline void set_read_buffer(const char *ptr, size_t len) { m_read_ptr = ptr; m_read_end_ptr = ptr + len; } /** * loads a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const { read_ptr = m_read_ptr; read_end_ptr = m_read_end_ptr; } /** * checks to see if a premature EOF was encountered while parsing. This * should be called if there is no more data to parse, and if the last * call to the parse() function returned boost::indeterminate * * @param http_msg the HTTP message object being parsed * @return true if premature EOF, false if message is OK & finished parsing */ inline bool check_premature_eof(http::message& http_msg) { if (m_message_parse_state != PARSE_CONTENT_NO_LENGTH) return true; m_message_parse_state = PARSE_END; http_msg.concatenate_chunks(); finish(http_msg); return false; } /** * controls headers-only parsing (default is disabled; content parsed also) * * @param b if true, then the parse() function returns true after headers */ inline void parse_headers_only(bool b = true) { m_parse_headers_only = b; } /** * skip parsing all headers and parse payload content only * * @param http_msg the HTTP message object being parsed */ inline void skip_header_parsing(http::message& http_msg) { boost::system::error_code ec; finish_header_parsing(http_msg, ec); } /// resets the parser to its initial state inline void reset(void) { m_message_parse_state = PARSE_START; m_headers_parse_state = (m_is_request ? PARSE_METHOD_START : PARSE_HTTP_VERSION_H); m_chunked_content_parse_state = PARSE_CHUNK_SIZE_START; m_status_code = 0; m_status_message.erase(); m_method.erase(); m_resource.erase(); m_query_string.erase(); m_raw_headers.erase(); m_bytes_content_read = m_bytes_last_read = m_bytes_total_read = 0; } /// returns true if there are no more bytes available in the read buffer inline bool eof(void) const { return m_read_ptr == NULL || m_read_ptr >= m_read_end_ptr; } /// returns the number of bytes available in the read buffer inline std::size_t bytes_available(void) const { return (eof() ? 0 : (std::size_t)(m_read_end_ptr - m_read_ptr)); } /// returns the number of bytes read during the last parse operation inline std::size_t gcount(void) const { return m_bytes_last_read; } /// returns the total number of bytes read while parsing the HTTP message inline std::size_t get_total_bytes_read(void) const { return m_bytes_total_read; } /// returns the total number of bytes read while parsing the payload content inline std::size_t get_content_bytes_read(void) const { return m_bytes_content_read; } /// returns the maximum length for HTTP payload content inline std::size_t get_max_content_length(void) const { return m_max_content_length; } /// returns the raw HTTP headers saved by the parser inline const std::string& get_raw_headers(void) const { return m_raw_headers; } /// returns true if the parser is saving raw HTTP header contents inline bool get_save_raw_headers(void) const { return m_save_raw_headers; } /// returns true if parsing headers only inline bool get_parse_headers_only(void) { return m_parse_headers_only; } /// returns true if the parser is being used to parse an HTTP request inline bool is_parsing_request(void) const { return m_is_request; } /// returns true if the parser is being used to parse an HTTP response inline bool is_parsing_response(void) const { return ! m_is_request; } /// defines a callback function to be used for consuming payload content inline void set_payload_handler(payload_handler_t& h) { m_payload_handler = h; } /// sets the maximum length for HTTP payload content inline void set_max_content_length(std::size_t n) { m_max_content_length = n; } /// resets the maximum length for HTTP payload content to the default value inline void reset_max_content_length(void) { m_max_content_length = DEFAULT_CONTENT_MAX; } /// sets parameter for saving raw HTTP header content inline void set_save_raw_headers(bool b) { m_save_raw_headers = b; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /** * parses a URI string * * @param uri the string to parse * @param proto will be set to the protocol (i.e. "http") * @param host will be set to the hostname (i.e. "www.cloudmeter.com") * @param port host port number to use for connection (i.e. 80) * @param path uri stem or file path * @param query uri query string * * @return true if the URI was successfully parsed, false if there was an error */ static bool parse_uri(const std::string& uri, std::string& proto, std::string& host, boost::uint16_t& port, std::string& path, std::string& query); /** * parse key-value pairs out of a url-encoded string * (i.e. this=that&a=value) * * @param dict dictionary for key-values pairs * @param ptr points to the start of the encoded string * @param len length of the encoded string, in bytes * * @return bool true if successful */ static bool parse_url_encoded(ihash_multimap& dict, const char *ptr, const std::size_t len); /** * parse key-value pairs out of a multipart/form-data payload content * (http://www.ietf.org/rfc/rfc2388.txt) * * @param dict dictionary for key-values pairs * @param content_type value of the content-type HTTP header * @param ptr points to the start of the encoded data * @param len length of the encoded data, in bytes * * @return bool true if successful */ static bool parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const char *ptr, const std::size_t len); /** * parse key-value pairs out of a "Cookie" request header * (i.e. this=that; a=value) * * @param dict dictionary for key-values pairs * @param ptr points to the start of the header string to be parsed * @param len length of the encoded string, in bytes * @param set_cookie_header set true if parsing Set-Cookie response header * * @return bool true if successful */ static bool parse_cookie_header(ihash_multimap& dict, const char *ptr, const std::size_t len, bool set_cookie_header); /** * parse key-value pairs out of a "Cookie" request header * (i.e. this=that; a=value) * * @param dict dictionary for key-values pairs * @param cookie_header header string to be parsed * @param set_cookie_header set true if parsing Set-Cookie response header * * @return bool true if successful */ static inline bool parse_cookie_header(ihash_multimap& dict, const std::string& cookie_header, bool set_cookie_header) { return parse_cookie_header(dict, cookie_header.c_str(), cookie_header.size(), set_cookie_header); } /** * parse key-value pairs out of a url-encoded string * (i.e. this=that&a=value) * * @param dict dictionary for key-values pairs * @param query the encoded query string to be parsed * * @return bool true if successful */ static inline bool parse_url_encoded(ihash_multimap& dict, const std::string& query) { return parse_url_encoded(dict, query.c_str(), query.size()); } /** * parse key-value pairs out of a multipart/form-data payload content * (http://www.ietf.org/rfc/rfc2388.txt) * * @param dict dictionary for key-values pairs * @param content_type value of the content-type HTTP header * @param form_data the encoded form data * * @return bool true if successful */ static inline bool parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const std::string& form_data) { return parse_multipart_form_data(dict, content_type, form_data.c_str(), form_data.size()); } /** * should be called after parsing HTTP headers, to prepare for payload content parsing * available in the read buffer * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP message (no content), * indeterminate = payload content is available to be parsed */ boost::tribool finish_header_parsing(http::message& http_msg, boost::system::error_code& ec); /** * parses an X-Forwarded-For HTTP header, and extracts from it an IP * address that best matches the client's public IP address (if any are found) * * @param header the X-Forwarded-For HTTP header to parse * @param public_ip the extract IP address, if found * * @return bool true if a public IP address was found and extracted */ static bool parse_forwarded_for(const std::string& header, std::string& public_ip); /// returns an instance of parser::error_category_t static inline error_category_t& get_error_category(void) { boost::call_once(parser::create_error_category, m_instance_flag); return *m_error_category_ptr; } protected: /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) {} /** * parses an HTTP message up to the end of the headers using bytes * available in the read buffer * * @param http_msg the HTTP message object to populate from parsing * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing HTTP headers, * indeterminate = not yet finished parsing HTTP headers */ boost::tribool parse_headers(http::message& http_msg, boost::system::error_code& ec); /** * updates an http::message object with data obtained from parsing headers * * @param http_msg the HTTP message object to populate from parsing */ void update_message_with_header_data(http::message& http_msg) const; /** * parses a chunked HTTP message-body using bytes available in the read buffer * * @param chunk_buffers buffers to be populated from parsing chunked content * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing message, * indeterminate = message is not yet finished */ boost::tribool parse_chunks(http::message::chunk_cache_t& chunk_buffers, boost::system::error_code& ec); /** * consumes payload content in the parser's read buffer * * @param http_msg the HTTP message object to consume content for * @param ec error_code contains additional information for parsing errors * * @return boost::tribool result of parsing: * false = message has an error, * true = finished parsing message, * indeterminate = message is not yet finished */ boost::tribool consume_content(http::message& http_msg, boost::system::error_code& ec); /** * consume the bytes available in the read buffer, converting them into * the next chunk for the HTTP message * * @param chunk_buffers buffers to be populated from parsing chunked content * @return std::size_t number of content bytes consumed, if any */ std::size_t consume_content_as_next_chunk(http::message::chunk_cache_t& chunk_buffers); /** * compute and sets a HTTP Message data integrity status * @param http_msg target HTTP message * @param msg_parsed_ok message parsing result */ static void compute_msg_status(http::message& http_msg, bool msg_parsed_ok); /** * sets an error code * * @param ec error code variable to define * @param ev error value to raise */ static inline void set_error(boost::system::error_code& ec, error_value_t ev) { ec = boost::system::error_code(static_cast(ev), get_error_category()); } /// creates the unique parser error_category_t static void create_error_category(void); // misc functions used by the parsing functions inline static bool is_char(int c); inline static bool is_control(int c); inline static bool is_special(int c); inline static bool is_digit(int c); inline static bool is_hex_digit(int c); inline static bool is_cookie_attribute(const std::string& name, bool set_cookie_header); /// maximum length for response status message static const boost::uint32_t STATUS_MESSAGE_MAX; /// maximum length for the request method static const boost::uint32_t METHOD_MAX; /// maximum length for the resource requested static const boost::uint32_t RESOURCE_MAX; /// maximum length for the query string static const boost::uint32_t QUERY_STRING_MAX; /// maximum length for an HTTP header name static const boost::uint32_t HEADER_NAME_MAX; /// maximum length for an HTTP header value static const boost::uint32_t HEADER_VALUE_MAX; /// maximum length for the name of a query string variable static const boost::uint32_t QUERY_NAME_MAX; /// maximum length for the value of a query string variable static const boost::uint32_t QUERY_VALUE_MAX; /// maximum length for the name of a cookie name static const boost::uint32_t COOKIE_NAME_MAX; /// maximum length for the value of a cookie; also used for path and domain static const boost::uint32_t COOKIE_VALUE_MAX; /// primary logging interface used by this class mutable logger m_logger; /// true if the message is an HTTP request; false if it is an HTTP response const bool m_is_request; /// points to the next character to be consumed in the read_buffer const char * m_read_ptr; /// points to the end of the read_buffer (last byte + 1) const char * m_read_end_ptr; private: /// state used to keep track of where we are in parsing the HTTP message enum message_parse_state_t { PARSE_START, PARSE_HEADERS, PARSE_FOOTERS, PARSE_CONTENT, PARSE_CONTENT_NO_LENGTH, PARSE_CHUNKS, PARSE_END }; /// state used to keep track of where we are in parsing the HTTP headers /// (only used if message_parse_state_t == PARSE_HEADERS) enum header_parse_state_t { PARSE_METHOD_START, PARSE_METHOD, PARSE_URI_STEM, PARSE_URI_QUERY, PARSE_HTTP_VERSION_H, PARSE_HTTP_VERSION_T_1, PARSE_HTTP_VERSION_T_2, PARSE_HTTP_VERSION_P, PARSE_HTTP_VERSION_SLASH, PARSE_HTTP_VERSION_MAJOR_START, PARSE_HTTP_VERSION_MAJOR, PARSE_HTTP_VERSION_MINOR_START, PARSE_HTTP_VERSION_MINOR, PARSE_STATUS_CODE_START, PARSE_STATUS_CODE, PARSE_STATUS_MESSAGE, PARSE_EXPECTING_NEWLINE, PARSE_EXPECTING_CR, PARSE_HEADER_WHITESPACE, PARSE_HEADER_START, PARSE_HEADER_NAME, PARSE_SPACE_BEFORE_HEADER_VALUE, PARSE_HEADER_VALUE, PARSE_EXPECTING_FINAL_NEWLINE, PARSE_EXPECTING_FINAL_CR }; /// state used to keep track of where we are in parsing chunked content /// (only used if message_parse_state_t == PARSE_CHUNKS) enum chunk_parse_state_t { PARSE_CHUNK_SIZE_START, PARSE_CHUNK_SIZE, PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE, PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE, PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE, PARSE_CHUNK, PARSE_EXPECTING_CR_AFTER_CHUNK, PARSE_EXPECTING_LF_AFTER_CHUNK, PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK, PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK }; /// the current state of parsing HTTP headers message_parse_state_t m_message_parse_state; /// the current state of parsing HTTP headers header_parse_state_t m_headers_parse_state; /// the current state of parsing chunked content chunk_parse_state_t m_chunked_content_parse_state; /// if defined, this function is used to consume payload content payload_handler_t m_payload_handler; /// Used for parsing the HTTP response status code boost::uint16_t m_status_code; /// Used for parsing the HTTP response status message std::string m_status_message; /// Used for parsing the request method std::string m_method; /// Used for parsing the name of resource requested std::string m_resource; /// Used for parsing the query string portion of a URI std::string m_query_string; /// Used to store the raw contents of HTTP headers when m_save_raw_headers is true std::string m_raw_headers; /// Used for parsing the name of HTTP headers std::string m_header_name; /// Used for parsing the value of HTTP headers std::string m_header_value; /// Used for parsing the chunk size std::string m_chunk_size_str; /// number of bytes in the chunk currently being parsed std::size_t m_size_of_current_chunk; /// number of bytes read so far in the chunk currently being parsed std::size_t m_bytes_read_in_current_chunk; /// number of payload content bytes that have not yet been read std::size_t m_bytes_content_remaining; /// number of bytes read so far into the message's payload content std::size_t m_bytes_content_read; /// number of bytes read during last parse operation std::size_t m_bytes_last_read; /// total number of bytes read while parsing the HTTP message std::size_t m_bytes_total_read; /// maximum length for HTTP payload content std::size_t m_max_content_length; /// if true, then only HTTP headers will be parsed (no content parsing) bool m_parse_headers_only; /// if true, the raw contents of HTTP headers are stored into m_raw_headers bool m_save_raw_headers; /// points to a single and unique instance of the parser error_category_t static error_category_t * m_error_category_ptr; /// used to ensure thread safety of the parser error_category_t static boost::once_flag m_instance_flag; }; // inline functions for parser inline bool parser::is_char(int c) { return(c >= 0 && c <= 127); } inline bool parser::is_control(int c) { return( (c >= 0 && c <= 31) || c == 127); } inline bool parser::is_special(int c) { switch (c) { case '(': case ')': case '<': case '>': case '@': case ',': case ';': case ':': case '\\': case '"': case '/': case '[': case ']': case '?': case '=': case '{': case '}': case ' ': case '\t': return true; default: return false; } } inline bool parser::is_digit(int c) { return(c >= '0' && c <= '9'); } inline bool parser::is_hex_digit(int c) { return((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); } inline bool parser::is_cookie_attribute(const std::string& name, bool set_cookie_header) { return (name.empty() || name[0] == '$' || (set_cookie_header && (name=="Comment" || name=="Domain" || name=="Max-Age" || name=="Path" || name=="Secure" || name=="Version" || name=="Expires") ) ); } } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/response_reader.hpp0000644000372000001440000001064612314121350023176 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_RESPONSE_READER_HEADER__ #define __PION_HTTP_RESPONSE_READER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// response_reader: asynchronously reads and parses HTTP responses /// class response_reader : public http::reader, public boost::enable_shared_from_this { public: /// function called after the HTTP message has been parsed typedef boost::function3 finished_handler_t; // default destructor virtual ~response_reader() {} /** * creates new response_reader objects * * @param tcp_conn TCP connection containing a new message to parse * @param http_request the request we are responding to * @param handler function called after the message has been parsed */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) { return boost::shared_ptr (new response_reader(tcp_conn, http_request, handler)); } /// sets a function to be called after HTTP headers have been parsed inline void set_headers_parsed_callback(finished_handler_t& h) { m_parsed_headers = h; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection containing a new message to parse * @param http_request the request we are responding to * @param handler function called after the message has been parsed */ response_reader(tcp::connection_ptr& tcp_conn, const http::request& http_request, finished_handler_t handler) : http::reader(false, tcp_conn), m_http_msg(new http::response(http_request)), m_finished(handler) { m_http_msg->set_remote_ip(tcp_conn->get_remote_ip()); set_logger(PION_GET_LOGGER("pion.http.response_reader")); } /// Reads more bytes from the TCP connection virtual void read_bytes(void) { get_connection()->async_read_some(boost::bind(&response_reader::consume_bytes, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } /// Called after we have finished parsing the HTTP message headers virtual void finished_parsing_headers(const boost::system::error_code& ec) { // call the finished headers handler with the HTTP message if (m_parsed_headers) m_parsed_headers(m_http_msg, get_connection(), ec); } /// Called after we have finished reading/parsing the HTTP message virtual void finished_reading(const boost::system::error_code& ec) { // call the finished handler with the finished HTTP message if (m_finished) m_finished(m_http_msg, get_connection(), ec); } /// Returns a reference to the HTTP message being parsed virtual http::message& get_message(void) { return *m_http_msg; } /// The new HTTP message container being created http::response_ptr m_http_msg; /// function called after the HTTP message has been parsed finished_handler_t m_finished; /// function called after the HTTP message headers have been parsed finished_handler_t m_parsed_headers; }; /// data type for a response_reader pointer typedef boost::shared_ptr response_reader_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/plugin_server.hpp0000644000372000001440000001254312314121350022700 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_SERVER_HEADER__ #define __PION_PLUGIN_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// plugin_server: a server that handles HTTP connections using http::plugin_service plug-ins /// class PION_API plugin_server : public http::server { public: /// default destructor virtual ~plugin_server() { clear(); } /** * creates a new plugin_server object * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit plugin_server(const unsigned int tcp_port = 0) : http::server(tcp_port) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit plugin_server(const boost::asio::ip::tcp::endpoint& endpoint) : http::server(endpoint) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit plugin_server(scheduler& sched, const unsigned int tcp_port = 0) : http::server(sched, tcp_port) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * creates a new plugin_server object * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ plugin_server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : http::server(sched, endpoint) { set_logger(PION_GET_LOGGER("pion.http.plugin_server")); } /** * adds a new web service to the web server * * @param resource the resource name or uri-stem to bind to the web service * @param service_ptr a pointer to the web service */ void add_service(const std::string& resource, http::plugin_service *service_ptr); /** * loads a web service from a shared object file * * @param resource the resource name or uri-stem to bind to the web service * @param service_name the name of the web service to load (searches plug-in * directories and appends extensions) */ void load_service(const std::string& resource, const std::string& service_name); /** * sets a configuration option for the web service associated with resource * * @param resource the resource name or uri-stem that identifies the web service * @param name the name of the configuration option * @param value the value to set the option to */ void set_service_option(const std::string& resource, const std::string& name, const std::string& value); /** * Parses a simple web service configuration file. Each line in the file * starts with one of the following commands: * * path VALUE : adds a directory to the web service search path * service RESOURCE FILE : loads web service bound to RESOURCE from FILE * option RESOURCE NAME=VALUE : sets web service option NAME to VALUE * * Blank lines or lines that begin with # are ignored as comments. * * @param config_name the name of the config file to parse */ void load_service_config(const std::string& config_name); /// clears all the web services that are currently configured virtual void clear(void) { if (is_listening()) stop(); m_services.clear(); http::server::clear(); } protected: /// called before the TCP server starts listening for new connections virtual void before_starting(void) { // call the start() method for each web service associated with this server m_services.run(boost::bind(&http::plugin_service::start, _1)); } /// called after the TCP server has stopped listening for new connections virtual void after_stopping(void) { // call the stop() method for each web service associated with this server m_services.run(boost::bind(&http::plugin_service::stop, _1)); } private: /// data type for a collection of web services typedef plugin_manager service_manager_t; /// Web services associated with this server service_manager_t m_services; }; /// data type for a web server pointer typedef boost::shared_ptr plugin_server_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/types.hpp0000644000372000001440000001261012314121350021153 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_TYPES_HEADER__ #define __PION_HTTP_TYPES_HEADER__ #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// types: common data types used by HTTP /// struct PION_API types { /// virtual destructor virtual ~types() {} // generic strings used by HTTP static const std::string STRING_EMPTY; static const std::string STRING_CRLF; static const std::string STRING_HTTP_VERSION; static const std::string HEADER_NAME_VALUE_DELIMITER; static const std::string COOKIE_NAME_VALUE_DELIMITER; // common HTTP header names static const std::string HEADER_HOST; static const std::string HEADER_COOKIE; static const std::string HEADER_SET_COOKIE; static const std::string HEADER_CONNECTION; static const std::string HEADER_CONTENT_TYPE; static const std::string HEADER_CONTENT_LENGTH; static const std::string HEADER_CONTENT_LOCATION; static const std::string HEADER_CONTENT_ENCODING; static const std::string HEADER_CONTENT_DISPOSITION; static const std::string HEADER_LAST_MODIFIED; static const std::string HEADER_IF_MODIFIED_SINCE; static const std::string HEADER_TRANSFER_ENCODING; static const std::string HEADER_LOCATION; static const std::string HEADER_AUTHORIZATION; static const std::string HEADER_REFERER; static const std::string HEADER_USER_AGENT; static const std::string HEADER_X_FORWARDED_FOR; static const std::string HEADER_CLIENT_IP; // common HTTP content types static const std::string CONTENT_TYPE_HTML; static const std::string CONTENT_TYPE_TEXT; static const std::string CONTENT_TYPE_XML; static const std::string CONTENT_TYPE_URLENCODED; static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA; // common HTTP request methods static const std::string REQUEST_METHOD_HEAD; static const std::string REQUEST_METHOD_GET; static const std::string REQUEST_METHOD_PUT; static const std::string REQUEST_METHOD_POST; static const std::string REQUEST_METHOD_DELETE; // common HTTP response messages static const std::string RESPONSE_MESSAGE_OK; static const std::string RESPONSE_MESSAGE_CREATED; static const std::string RESPONSE_MESSAGE_ACCEPTED; static const std::string RESPONSE_MESSAGE_NO_CONTENT; static const std::string RESPONSE_MESSAGE_FOUND; static const std::string RESPONSE_MESSAGE_UNAUTHORIZED; static const std::string RESPONSE_MESSAGE_FORBIDDEN; static const std::string RESPONSE_MESSAGE_NOT_FOUND; static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED; static const std::string RESPONSE_MESSAGE_NOT_MODIFIED; static const std::string RESPONSE_MESSAGE_BAD_REQUEST; static const std::string RESPONSE_MESSAGE_SERVER_ERROR; static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED; static const std::string RESPONSE_MESSAGE_CONTINUE; // common HTTP response codes static const unsigned int RESPONSE_CODE_OK; static const unsigned int RESPONSE_CODE_CREATED; static const unsigned int RESPONSE_CODE_ACCEPTED; static const unsigned int RESPONSE_CODE_NO_CONTENT; static const unsigned int RESPONSE_CODE_FOUND; static const unsigned int RESPONSE_CODE_UNAUTHORIZED; static const unsigned int RESPONSE_CODE_FORBIDDEN; static const unsigned int RESPONSE_CODE_NOT_FOUND; static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED; static const unsigned int RESPONSE_CODE_NOT_MODIFIED; static const unsigned int RESPONSE_CODE_BAD_REQUEST; static const unsigned int RESPONSE_CODE_SERVER_ERROR; static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED; static const unsigned int RESPONSE_CODE_CONTINUE; /// converts time_t format into an HTTP-date string static std::string get_date_string(const time_t t); /// builds an HTTP query string from a collection of query parameters static std::string make_query_string(const ihash_multimap& query_params); /** * creates a "Set-Cookie" header * * @param name the name of the cookie * @param value the value of the cookie * @param path the path of the cookie * @param has_max_age true if the max_age value should be set * @param max_age the life of the cookie, in seconds (0 = discard) * * @return the new "Set-Cookie" header */ static std::string make_set_cookie_header(const std::string& name, const std::string& value, const std::string& path, const bool has_max_age = false, const unsigned long max_age = 0); }; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/request_writer.hpp0000644000372000001440000001454512314121350023104 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_WRITER_HEADER__ #define __PION_HTTP_REQUEST_WRITER_HEADER__ #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request_writer: used to asynchronously send HTTP requests /// class request_writer : public http::writer, public boost::enable_shared_from_this { public: /// default destructor virtual ~request_writer() {} /** * creates new request_writer objects * * @param tcp_conn TCP connection used to send the request * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new request_writer(tcp_conn, handler)); } /** * creates new request_writer objects * * @param tcp_conn TCP connection used to send the request * @param http_request_ptr pointer to the request that will be sent * @param handler function called after the request has been sent * * @return boost::shared_ptr shared pointer to * the new writer object that was created */ static inline boost::shared_ptr create(tcp::connection_ptr& tcp_conn, http::request_ptr& http_request_ptr, finished_handler_t handler = finished_handler_t()) { return boost::shared_ptr(new request_writer(tcp_conn, http_request_ptr, handler)); } /// returns a non-const reference to the request that will be sent inline http::request& get_request(void) { return *m_http_request; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the request * @param handler function called after the request has been sent */ request_writer(tcp::connection_ptr& tcp_conn, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_request(new http::request) { set_logger(PION_GET_LOGGER("pion.http.request_writer")); } /** * protected constructor restricts creation of objects (use create()) * * @param tcp_conn TCP connection used to send the request * @param http_request_ptr pointer to the request that will be sent * @param handler function called after the request has been sent */ request_writer(tcp::connection_ptr& tcp_conn, http::request_ptr& http_request_ptr, finished_handler_t handler) : http::writer(tcp_conn, handler), m_http_request(http_request_ptr) { set_logger(PION_GET_LOGGER("pion.http.request_writer")); // check if we should initialize the payload content using // the request's content buffer if (m_http_request->get_content_length() > 0 && m_http_request->get_content() != NULL && m_http_request->get_content()[0] != '\0') { write_no_copy(m_http_request->get_content(), m_http_request->get_content_length()); } } /** * initializes a vector of write buffers with the HTTP message information * * @param write_buffers vector of write buffers to initialize */ virtual void prepare_buffers_for_send(http::message::write_buffers_t& write_buffers) { if (get_content_length() > 0) m_http_request->set_content_length(get_content_length()); m_http_request->prepare_buffers_for_send(write_buffers, get_connection()->get_keep_alive(), sending_chunked_message()); } /// returns a function bound to http::writer::handle_write() virtual write_handler_t bind_to_write_handler(void) { return boost::bind(&request_writer::handle_write, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred); } /** * called after the request is sent * * @param write_error error status from the last write operation * @param bytes_written number of bytes sent by the last write operation */ virtual void handle_write(const boost::system::error_code& write_error, std::size_t bytes_written) { logger log_ptr(get_logger()); if (! write_error) { // request sent OK if (sending_chunked_message()) { PION_LOG_DEBUG(log_ptr, "Sent HTTP request chunk of " << bytes_written << " bytes"); clear(); } else { PION_LOG_DEBUG(log_ptr, "Sent HTTP request of " << bytes_written << " bytes"); } } finished_writing(write_error); } private: /// the request that will be sent http::request_ptr m_http_request; /// the initial HTTP request header line std::string m_request_line; }; /// data type for a request_writer pointer typedef boost::shared_ptr request_writer_ptr; /// override operator<< for convenience template const request_writer_ptr& operator<<(const request_writer_ptr& writer, const T& data) { writer->write(data); return writer; } } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/auth.hpp0000644000372000001440000001243712314121350020757 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_AUTH_HEADER__ #define __PION_HTTP_AUTH_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include // order important, otherwise compiling error under win32 namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// auth: a base class for handling HTTP Authentication and session management /// class PION_API auth : private boost::noncopyable { public: /// default constructor auth(user_manager_ptr userManager) : m_logger(PION_GET_LOGGER("pion.http.auth")), m_user_manager(userManager) {} /// virtual destructor virtual ~auth() {} /** * attempts to validate authentication of a new HTTP request. * If request valid, pointer to user identity object (if any) will be preserved in * the request and return "true". * If request not authenticated, appropriate response is sent over tcp_conn * and return "false"; * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * * @return true if request valid and user identity inserted into request */ virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) = 0; /** * sets a configuration option * * @param name the name of the option to change * @param value the value of the option */ virtual void set_option(const std::string& name, const std::string& value) { BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } /** * adds a resource that requires authentication * * @param resource the resource name or uri-stem that requires authentication */ void add_restrict(const std::string& resource); /** * adds a resource that does NOT require authentication * * @param resource the resource name or uri-stem that does not require authentication */ void add_permit(const std::string& resource); /** * used to add a new user * * @ return false if user with such name already exists */ virtual bool add_user(std::string const &username, std::string const &password) { return m_user_manager->add_user(username, password); } /** * update password for given user * * @return false if user with such a name doesn't exist */ virtual bool update_user(std::string const &username, std::string const &password) { return m_user_manager->update_user(username, password); } /** * used to remove given user * * @return false if no user with such username */ virtual bool remove_user(std::string const &username) { return m_user_manager->remove_user(username); }; /** * Used to locate user object by username */ virtual user_ptr get_user(std::string const &username) { return m_user_manager->get_user(username); } protected: /// data type for a set of resources to be authenticated typedef std::set resource_set_type; /// data type used to map authentication credentials to user objects typedef std::map > user_cache_type; /** * check if given HTTP request requires authentication * * @param http_request_ptr the HTTP request to check */ bool need_authentication(http::request_ptr const& http_request_ptr) const; /** * tries to find a resource in a given collection * * @param resource_set the collection of resource to look in * @param resource the resource to look for * * @return true if the resource was found */ bool find_resource(const resource_set_type& resource_set, const std::string& resource) const; /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// primary logging interface used by this class mutable logger m_logger; /// container used to manager user objects user_manager_ptr m_user_manager; /// collection of resources that require authentication resource_set_type m_restrict_list; /// collection of resources that do NOT require authentication resource_set_type m_white_list; /// mutex used to protect access to the resources mutable boost::mutex m_resource_mutex; }; /// data type for a auth pointer typedef boost::shared_ptr auth_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/Makefile.am0000644000372000001440000000066712314121350021343 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_http_includedir = $(includedir)/pion/http pion_http_include_HEADERS = \ auth.hpp basic_auth.hpp cookie_auth.hpp message.hpp parser.hpp \ plugin_server.hpp plugin_service.hpp reader.hpp request.hpp \ request_reader.hpp request_writer.hpp response.hpp response_reader.hpp \ response_writer.hpp server.hpp types.hpp writer.hpp pion-5.0.6+dfsg.orig/include/pion/http/server.hpp0000644000372000001440000002533212314121350021322 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_SERVER_HEADER__ #define __PION_HTTP_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// server: a server that handles HTTP connections /// class PION_API server : public tcp::server { public: /// type of function that is used to handle requests typedef boost::function2 request_handler_t; /// handler for requests that result in "500 Server Error" typedef boost::function3 error_handler_t; /// default destructor virtual ~server() { if (is_listening()) stop(); } /** * creates a new server object * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(const unsigned int tcp_port = 0) : tcp::server(tcp_port), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit server(const boost::asio::ip::tcp::endpoint& endpoint) : tcp::server(endpoint), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(scheduler& sched, const unsigned int tcp_port = 0) : tcp::server(sched, tcp_port), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * creates a new server object * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : tcp::server(sched, endpoint), m_bad_request_handler(server::handle_bad_request), m_not_found_handler(server::handle_not_found_request), m_server_error_handler(server::handle_server_error), m_max_content_length(http::parser::DEFAULT_CONTENT_MAX) { set_logger(PION_GET_LOGGER("pion.http.server")); } /** * adds a new web service to the HTTP server * * @param resource the resource name or uri-stem to bind to the handler * @param request_handler function used to handle requests to the resource */ void add_resource(const std::string& resource, request_handler_t request_handler); /** * removes a web service from the HTTP server * * @param resource the resource name or uri-stem to remove */ void remove_resource(const std::string& resource); /** * adds a new resource redirection to the HTTP server * * @param requested_resource the resource name or uri-stem that will be redirected * @param new_resource the resource that requested_resource will be redirected to */ void add_redirect(const std::string& requested_resource, const std::string& new_resource); /// sets the function that handles bad HTTP requests inline void set_bad_request_handler(request_handler_t h) { m_bad_request_handler = h; } /// sets the function that handles requests which match no other web services inline void set_not_found_handler(request_handler_t h) { m_not_found_handler = h; } /// sets the function that handles requests which match no other web services inline void set_error_handler(error_handler_t h) { m_server_error_handler = h; } /// clears the collection of resources recognized by the HTTP server virtual void clear(void) { if (is_listening()) stop(); boost::mutex::scoped_lock resource_lock(m_resource_mutex); m_resources.clear(); } /** * strips trailing slash from a string, if one exists * * @param str the original string * @return the resulting string, after any trailing slash is removed */ static inline std::string strip_trailing_slash(const std::string& str) { std::string result(str); if (!result.empty() && result[result.size()-1]=='/') result.resize(result.size() - 1); return result; } /** * used to send responses when a bad HTTP request is made * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ static void handle_bad_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when no web services can handle the request * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request */ static void handle_not_found_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); /** * used to send responses when a server error occurs * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param error_msg message that explains what went wrong */ static void handle_server_error(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg); /** * used to send responses when a request is forbidden * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param error_msg message that explains what went wrong */ static void handle_forbidden_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg); /** * used to send responses when a method is not allowed * * @param http_request_ptr the new HTTP request to handle * @param tcp_conn the TCP connection that has the new request * @param allowed_methods optional comma separated list of allowed methods */ static void handle_method_not_allowed(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& allowed_methods = ""); /** * sets the handler object for authentication verification processing */ inline void set_authentication(http::auth_ptr auth) { m_auth_ptr = auth; } /// sets the maximum length for HTTP request payload content inline void set_max_content_length(std::size_t n) { m_max_content_length = n; } protected: /** * handles a new TCP connection * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(tcp::connection_ptr& tcp_conn); /** * handles a new HTTP request * * @param http_request_ptr the HTTP request to handle * @param tcp_conn TCP connection containing a new request * @param ec error_code contains additional information for parsing errors */ virtual void handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const boost::system::error_code& ec); /** * searches for the appropriate request handler to use for a given resource * * @param resource the name of the resource to search for * @param request_handler function that can handle requests for this resource */ virtual bool find_request_handler(const std::string& resource, request_handler_t& request_handler) const; private: /// maximum number of redirections static const unsigned int MAX_REDIRECTS; /// data type for a map of resources to request handlers typedef std::map resource_map_t; /// data type for a map of requested resources to other resources typedef std::map redirect_map_t; /// collection of resources that are recognized by this HTTP server resource_map_t m_resources; /// collection of redirections from a requested resource to another resource redirect_map_t m_redirects; /// points to a function that handles bad HTTP requests request_handler_t m_bad_request_handler; /// points to a function that handles requests which match no web services request_handler_t m_not_found_handler; /// points to the function that handles server errors error_handler_t m_server_error_handler; /// mutex used to protect access to the resources mutable boost::mutex m_resource_mutex; /// pointer to authentication handler object http::auth_ptr m_auth_ptr; /// maximum length for HTTP request payload content std::size_t m_max_content_length; }; /// data type for a HTTP server pointer typedef boost::shared_ptr server_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/http/request.hpp0000644000372000001440000001670312314121350021506 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HTTP_REQUEST_HEADER__ #define __PION_HTTP_REQUEST_HEADER__ #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http /// /// request: container for HTTP request information /// class request : public http::message { public: /** * constructs a new request object * * @param resource the HTTP resource to request */ request(const std::string& resource) : m_method(REQUEST_METHOD_GET), m_resource(resource) {} /// constructs a new request object (default constructor) request(void) : m_method(REQUEST_METHOD_GET) {} /// virtual destructor virtual ~request() {} /// clears all request data virtual void clear(void) { http::message::clear(); m_method.erase(); m_resource.erase(); m_original_resource.erase(); m_query_string.erase(); m_query_params.clear(); m_user_record.reset(); } /// the content length of the message can never be implied for requests virtual bool is_content_length_implied(void) const { return false; } /// returns the request method (i.e. GET, POST, PUT) inline const std::string& get_method(void) const { return m_method; } /// returns the resource uri-stem to be delivered (possibly the result of a redirect) inline const std::string& get_resource(void) const { return m_resource; } /// returns the resource uri-stem originally requested inline const std::string& get_original_resource(void) const { return m_original_resource; } /// returns the uri-query or query string requested inline const std::string& get_query_string(void) const { return m_query_string; } /// returns a value for the query key if any are defined; otherwise, an empty string inline const std::string& get_query(const std::string& key) const { return get_value(m_query_params, key); } /// returns the query parameters inline ihash_multimap& get_queries(void) { return m_query_params; } /// returns true if at least one value for the query key is defined inline bool has_query(const std::string& key) const { return(m_query_params.find(key) != m_query_params.end()); } /// sets the HTTP request method (i.e. GET, POST, PUT) inline void set_method(const std::string& str) { m_method = str; clear_first_line(); } /// sets the resource or uri-stem originally requested inline void set_resource(const std::string& str) { m_resource = m_original_resource = str; clear_first_line(); } /// changes the resource or uri-stem to be delivered (called as the result of a redirect) inline void change_resource(const std::string& str) { m_resource = str; } /// sets the uri-query or query string requested inline void set_query_string(const std::string& str) { m_query_string = str; clear_first_line(); } /// adds a value for the query key inline void add_query(const std::string& key, const std::string& value) { m_query_params.insert(std::make_pair(key, value)); } /// changes the value of a query key inline void change_query(const std::string& key, const std::string& value) { change_value(m_query_params, key, value); } /// removes all values for a query key inline void delete_query(const std::string& key) { delete_value(m_query_params, key); } /// use the query parameters to build a query string for the request inline void use_query_params_for_query_string(void) { set_query_string(make_query_string(m_query_params)); } /// use the query parameters to build POST content for the request inline void use_query_params_for_post_content(void) { std::string post_content(make_query_string(m_query_params)); set_content_length(post_content.size()); char *ptr = create_content_buffer(); // null-terminates buffer if (! post_content.empty()) memcpy(ptr, post_content.c_str(), post_content.size()); set_method(REQUEST_METHOD_POST); set_content_type(CONTENT_TYPE_URLENCODED); } /// add content (for POST) from string inline void set_content(const std::string &value) { set_content_length(value.size()); char *ptr = create_content_buffer(); if (! value.empty()) memcpy(ptr, value.c_str(), value.size()); } /// add content (for POST) from buffer of given size /// does nothing if the buffer is invalid or the buffer size is zero inline void set_content(const char* value, size_t size) { if ( NULL == value || 0 == size ) return; set_content_length(size); char *ptr = create_content_buffer(); memcpy(ptr, value, size); } /// sets the user record for HTTP request after authentication inline void set_user(user_ptr user) { m_user_record = user; } /// get the user record for HTTP request after authentication inline user_ptr get_user() const { return m_user_record; } protected: /// updates the string containing the first line for the HTTP message virtual void update_first_line(void) const { // start out with the request method m_first_line = m_method; m_first_line += ' '; // append the resource requested m_first_line += m_resource; if (! m_query_string.empty()) { // append query string if not empty m_first_line += '?'; m_first_line += m_query_string; } m_first_line += ' '; // append HTTP version m_first_line += get_version_string(); } /// appends HTTP headers for any cookies defined by the http::message virtual void append_cookie_headers(void) { for (ihash_multimap::const_iterator i = get_cookies().begin(); i != get_cookies().end(); ++i) { std::string cookie_header; cookie_header = i->first; cookie_header += COOKIE_NAME_VALUE_DELIMITER; cookie_header += i->second; add_header(HEADER_COOKIE, cookie_header); } } private: /// request method (GET, POST, PUT, etc.) std::string m_method; /// name of the resource or uri-stem to be delivered std::string m_resource; /// name of the resource or uri-stem originally requested std::string m_original_resource; /// query string portion of the URI std::string m_query_string; /// HTTP query parameters parsed from the request line and post content ihash_multimap m_query_params; /// pointer to user record if this request had been authenticated user_ptr m_user_record; }; /// data type for a HTTP request pointer typedef boost::shared_ptr request_ptr; } // end namespace http } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/spdy/0000755000372000001440000000000012314121442017300 5ustar robertouserspion-5.0.6+dfsg.orig/include/pion/spdy/Makefile.in0000644000372000001440000003664012314121400021350 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/spdy DIST_COMMON = $(pion_spdy_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_spdy_includedir)" HEADERS = $(pion_spdy_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_spdy_includedir = $(includedir)/pion/spdy pion_spdy_include_HEADERS = \ decompressor.hpp parser.hpp types.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/spdy/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/spdy/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_spdy_includeHEADERS: $(pion_spdy_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_spdy_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_spdy_includedir)" @list='$(pion_spdy_include_HEADERS)'; test -n "$(pion_spdy_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_spdy_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_spdy_includedir)" || exit $$?; \ done uninstall-pion_spdy_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_spdy_include_HEADERS)'; test -n "$(pion_spdy_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_spdy_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_spdy_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_spdy_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_spdy_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_spdy_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_spdy_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_spdy_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/spdy/decompressor.hpp0000644000372000001440000000502612314121350022517 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYDECOMPRESSOR_HEADER__ #define __PION_SPDYDECOMPRESSOR_HEADER__ #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy /// /// SPDYDecompressor : Decompresses SPDY frames /// class PION_API decompressor { public: /// data size constants enum data_size_t { /// maximum size of an uncompressed spdy header MAX_UNCOMPRESSED_DATA_BUF_SIZE = 16384 }; /// constructs a new decompressor object (default constructor) decompressor(); /// destructor ~decompressor(); /** * decompresses the http content * * @return the uncompressed string, or null on failure */ char* decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info& frame, boost::uint32_t header_block_length); protected: /** * decompresses the spdy header * * @return true if successful */ bool spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t& uncomp_length); private: /// zlib stream for decompression request packets z_streamp m_request_zstream; /// zlib stream for decompression response packets z_streamp m_response_zstream; /// dictionary identifier boost::uint32_t m_dictionary_id; /// Used for decompressing spdy headers boost::uint8_t m_uncompressed_header[MAX_UNCOMPRESSED_DATA_BUF_SIZE]; // SPDY Dictionary used for zlib decompression static const char SPDY_ZLIB_DICTIONARY[]; }; /// data type for a spdy reader pointer typedef boost::shared_ptr decompressor_ptr; } // end namespace spdy } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/spdy/parser.hpp0000644000372000001440000002050312314121350021303 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYPARSER_HEADER__ #define __PION_SPDYPARSER_HEADER__ #include #include #include #include #include #include #include #include #ifndef BOOST_SYSTEM_NOEXCEPT #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT #endif namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy /// /// parser : parsers and reads the SPDY frames /// class PION_API parser { public: /// class-specific error code values enum error_value_t { ERROR_INVALID_SPDY_FRAME = 1, ERROR_INVALID_SPDY_VERSION, ERROR_DECOMPRESSION, ERROR_PROTOCOL_ERROR, ERROR_INTERNAL_SPDY_ERROR, ERROR_MISSING_HEADER_DATA }; /// class-specific error category class error_category_t : public boost::system::error_category { public: const char *name() const BOOST_SYSTEM_NOEXCEPT { return "SPDYParser"; } std::string message(int ev) const { switch (ev) { case ERROR_INVALID_SPDY_FRAME: return "invalid spdy frame"; case ERROR_INVALID_SPDY_VERSION: return "invalid spdy version"; case ERROR_DECOMPRESSION: return "error in decompression"; case ERROR_MISSING_HEADER_DATA: return "missing header data"; } return "SPDYParser error"; } }; /// constructs a new parser object (default constructor) parser(); /// destructor ~parser() {} /** * parse a SPDY packet * * @return boost::tribool result of parsing: * false = SPDY frame has an error, * true = finished parsing SPDY frame, * indeterminate = not yet finished parsing SPDY frame */ boost::tribool parse(http_protocol_info& http_headers, boost::system::error_code& ec, decompressor_ptr& decompressor, const char *packet_ptr, boost::uint32_t& length_packet, boost::uint32_t current_stream_count); /// Get the pointer to the first character to the spdy data contect const char * get_spdy_data_content( ) { return m_last_data_chunk_ptr; } /// Get the pointer to the first character to the spdy data contect const char * get_spdy_read_pointer( ) { return m_read_ptr; } /** * checks if the frame is spdy frame or not * * @return true if it is a frame else returns false */ static spdy_frame_type get_spdy_frame_type(const char *ptr); /** * checks if the frame is spdy control frame or not * * @return true if it is a control frame else returns false */ static bool is_spdy_control_frame(const char *ptr); /** * get the stream id for the spdy control frame * * @return true if it is a control frame else returns false */ static boost::uint32_t get_control_frame_stream_id(const char *ptr); protected: /// resets the read pointer inline void set_read_ptr(const char *ptr) { m_read_ptr = m_current_data_chunk_ptr = ptr; } /// populates the frame for every spdy packet /// Returns false if there was an error else returns true bool populate_frame(boost::system::error_code& ec, spdy_control_frame_info& frame, boost::uint32_t& length_packet, boost::uint32_t& stream_id, http_protocol_info& http_headers); /// creates the unique parser error_category_t static void create_error_category(void); /// returns an instance of parser::error_category_t static inline error_category_t& get_error_category(void) { boost::call_once(parser::create_error_category, m_instance_flag); return *m_error_category_ptr; } /** * sets an error code * * @param ec error code variable to define * @param ev error value to raise */ static inline void set_error(boost::system::error_code& ec, error_value_t ev) { ec = boost::system::error_code(static_cast(ev), get_error_category()); } /** * parses an the header payload for SPDY * */ void parse_header_payload(boost::system::error_code& ec, decompressor_ptr& decompressor, const spdy_control_frame_info& frame, http_protocol_info& http_headers, boost::uint32_t current_stream_count); /** * parses the data for SPDY * */ void parse_spdy_data(boost::system::error_code& ec, const spdy_control_frame_info& frame, boost::uint32_t stream_id, http_protocol_info& http_info); /** * parses an the Settings Frame for SPDY * */ void parse_spdy_settings_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the RST stream for SPDY * */ void parse_spdy_rst_stream(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the Ping Frame for SPDY * */ void parse_spdy_ping_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the GoAway Frame for SPDY * */ void parse_spdy_goaway_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parses an the WindowUpdate Frame for SPDY * */ void parse_spdy_window_update_frame(boost::system::error_code& ec, const spdy_control_frame_info& frame); /** * parse a SPDY frame (protected implementation) * * @return boost::tribool result of parsing: * false = SPDY frame has an error, * true = finished parsing SPDY frame, * indeterminate = not yet finished parsing SPDY frame */ boost::tribool parse_spdy_frame(boost::system::error_code& ec, decompressor_ptr& decompressor, http_protocol_info& http_headers, boost::uint32_t& length_packet, boost::uint32_t current_stream_count); private: /// generic read pointer which parses the spdy data const char * m_read_ptr; /// points to the first character of the uncompressed http headers const char * m_uncompressed_ptr; /// SPDY has interleaved frames and this will point to start of the current chunk data const char * m_current_data_chunk_ptr; /// SPDY has interleaved frames and this will point to start of the the last chunk data const char * m_last_data_chunk_ptr; /// primary logging interface used by this class mutable logger m_logger; /// points to a single and unique instance of the HTTPParser ErrorCategory static error_category_t * m_error_category_ptr; /// used to ensure thread safety of the HTTPParser ErrorCategory static boost::once_flag m_instance_flag; }; /// data type for a spdy reader pointer typedef boost::shared_ptr parser_ptr; } // end namespace spdy } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/spdy/types.hpp0000644000372000001440000000532712314121350021162 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SPDYTYPES_HEADER__ #define __PION_SPDYTYPES_HEADER__ #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy #define MIN_SPDY_VERSION 3 // The types of SPDY frames #define SPDY_DATA 0 #define SPDY_SYN_STREAM 1 #define SPDY_SYN_REPLY 2 #define SPDY_RST_STREAM 3 #define SPDY_SETTINGS 4 #define SPDY_PING 6 #define SPDY_GOAWAY 7 #define SPDY_HEADERS 8 #define SPDY_WINDOW_UPDATE 9 #define SPDY_CREDENTIAL 10 #define SPDY_INVALID 11 #define SPDY_FLAG_FIN 0x01 #define SPDY_FLAG_UNIDIRECTIONAL 0x02 #define SIZE_OF_BYTE 8 #define NON_SPDY 0 #define HTTP_REQUEST 1 #define HTTP_RESPONSE 2 #define HTTP_DATA 3 #define SPDY_CONTROL 4 /// This structure will be tied to each SPDY frame typedef struct spdy_control_frame_info{ bool control_bit; boost::uint16_t version; boost::uint16_t type; boost::uint8_t flags; boost::uint32_t length; // Actually only 24 bits. } spdy_control_frame_info; /// This structure will be tied to each SPDY header frame. /// Only applies to frames containing headers: SYN_STREAM, SYN_REPLY, HEADERS /// Note that there may be multiple SPDY frames in one packet. typedef struct _spdy_header_info{ boost::uint32_t stream_id; boost::uint8_t *header_block; boost::uint8_t header_block_len; boost::uint16_t frame_type; } spdy_header_info; /// This structure contains the HTTP Protocol information typedef struct _http_protocol_info_t{ std::map http_headers; boost::uint32_t http_type; boost::uint32_t stream_id; boost::uint32_t data_offset; boost::uint32_t data_size; bool last_chunk; _http_protocol_info_t() : http_type(NON_SPDY), stream_id(0), data_offset(0), data_size(0), last_chunk(false){} } http_protocol_info; enum spdy_frame_type{ spdy_data_frame = 1, spdy_control_frame = 2, spdy_invalid_frame = 3 }; } // end namespace spdy } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/spdy/Makefile.am0000644000372000001440000000033612314121350021334 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_spdy_includedir = $(includedir)/pion/spdy pion_spdy_include_HEADERS = \ decompressor.hpp parser.hpp types.hpp pion-5.0.6+dfsg.orig/include/pion/Makefile.in0000644000372000001440000005254412314121377020407 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion DIST_COMMON = $(pion_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.hpp.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_includedir)" HEADERS = $(pion_include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_includedir = $(includedir)/pion pion_include_HEADERS = \ admin_rights.hpp algorithm.hpp config.hpp error.hpp hash_map.hpp logger.hpp \ plugin.hpp plugin_manager.hpp process.hpp scheduler.hpp user.hpp EXTRA_DIST = config.hpp.win config.hpp.xcode config.hpp.in SUBDIRS = http spdy test tcp all: config.hpp $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.hpp: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.hpp.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/pion/config.hpp $(srcdir)/config.hpp.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.hpp stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_includeHEADERS: $(pion_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_includedir)" @list='$(pion_include_HEADERS)'; test -n "$(pion_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_includedir)" || exit $$?; \ done uninstall-pion_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_include_HEADERS)'; test -n "$(pion_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_includedir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.hpp.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.hpp.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) config.hpp installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pion_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pion_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pion_includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pion_includeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-pion_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/tcp/0000755000372000001440000000000012314121442017107 5ustar robertouserspion-5.0.6+dfsg.orig/include/pion/tcp/Makefile.in0000644000372000001440000003661212314121400021156 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/tcp DIST_COMMON = $(pion_tcp_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_tcp_includedir)" HEADERS = $(pion_tcp_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_tcp_includedir = $(includedir)/pion/tcp pion_tcp_include_HEADERS = connection.hpp server.hpp stream.hpp timer.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/tcp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/tcp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_tcp_includeHEADERS: $(pion_tcp_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_tcp_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_tcp_includedir)" @list='$(pion_tcp_include_HEADERS)'; test -n "$(pion_tcp_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_tcp_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_tcp_includedir)" || exit $$?; \ done uninstall-pion_tcp_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_tcp_include_HEADERS)'; test -n "$(pion_tcp_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_tcp_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_tcp_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_tcp_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_tcp_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_tcp_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_tcp_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_tcp_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/tcp/timer.hpp0000644000372000001440000000436212314121350020743 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_TIMER_HEADER__ #define __PION_TCP_TIMER_HEADER__ #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// timer: helper class used to time-out TCP connections /// class PION_API timer : public boost::enable_shared_from_this { public: /** * creates a new TCP connection timer * * @param conn_ptr pointer to TCP connection to monitor */ timer(tcp::connection_ptr& conn_ptr); /** * starts a timer for closing a TCP connection * * @param seconds number of seconds before the timeout triggers */ void start(const boost::uint32_t seconds); /// cancel the timer (operation completed) void cancel(void); private: /** * Callback handler for the deadline timer * * @param ec deadline timer error status code */ void timer_callback(const boost::system::error_code& ec); /// pointer to the TCP connection that is being monitored tcp::connection_ptr m_conn_ptr; /// deadline timer used to timeout TCP operations boost::asio::deadline_timer m_timer; /// mutex used to synchronize the TCP connection timer boost::mutex m_mutex; /// true if the deadline timer is active bool m_timer_active; /// true if the timer was cancelled (operation completed) bool m_was_cancelled; }; /// shared pointer to a timer object typedef boost::shared_ptr timer_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/tcp/stream.hpp0000644000372000001440000004430412314121350021116 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_STREAM_HEADER__ #define __PION_TCP_STREAM_HEADER__ #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// stream_buffer: std::basic_streambuf wrapper for TCP network connections. /// Based in part on section 13.13.3 of "The Standard C++ Library" /// by Nicolai M. Josuttis, published in 1999 by Addison-Wesley /// class stream_buffer : public std::basic_streambuf > { public: // data type definitions required for iostream compatability typedef char char_type; typedef std::char_traits::int_type int_type; typedef std::char_traits::off_type off_type; typedef std::char_traits::pos_type pos_type; typedef std::char_traits traits_type; // some integer constants used within stream_buffer enum { PUT_BACK_MAX = 10, //< number of bytes that can be put back into the read buffer WRITE_BUFFER_SIZE = 8192 //< size of the write buffer }; /** * constructs a TCP stream buffer object for an existing TCP connection * * @param conn_ptr pointer to the TCP connection to use for reading & writing */ explicit stream_buffer(tcp::connection_ptr& conn_ptr) : m_conn_ptr(conn_ptr), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /** * constructs a TCP stream buffer object for a new TCP connection * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit stream_buffer(boost::asio::io_service& io_service, const bool ssl_flag = false) : m_conn_ptr(new connection(io_service, ssl_flag)), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /** * constructs a TCP stream buffer object for a new SSL/TCP connection * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ stream_buffer(boost::asio::io_service& io_service, connection::ssl_context_type& ssl_context) : m_conn_ptr(new connection(io_service, ssl_context)), m_read_buf(m_conn_ptr->get_read_buffer().c_array()) { setup_buffers(); } /// virtual destructor flushes the write buffer virtual ~stream_buffer() { sync(); } /// returns a reference to the current TCP connection connection& get_connection(void) { return *m_conn_ptr; } /// returns a const reference to the current TCP connection const connection& get_connection(void) const { return *m_conn_ptr; } protected: /// sets up the read and write buffers for input and output inline void setup_buffers(void) { // use the TCP connection's read buffer and allow for bytes to be put back setg(m_read_buf+PUT_BACK_MAX, m_read_buf+PUT_BACK_MAX, m_read_buf+PUT_BACK_MAX); // set write buffer size-1 so that we have an extra char avail for overflow setp(m_write_buf, m_write_buf+(WRITE_BUFFER_SIZE-1)); } /** * writes data in the output buffer to the TCP connection * * @return int_type the number of bytes sent, or eof() if there was an error */ inline int_type flush_output(void) { const std::streamsize bytes_to_send = std::streamsize(pptr() - pbase()); int_type bytes_sent = 0; if (bytes_to_send > 0) { boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_write(boost::asio::buffer(pbase(), bytes_to_send), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); bytes_sent = m_bytes_transferred; pbump(-bytes_sent); if (m_async_error) bytes_sent = traits_type::eof(); } return bytes_sent; } /** * this function is called when the read buffer has no more characters available * * @return int_type the next character available for reading, or eof() if there was an error */ virtual int_type underflow(void) { // first check if we still have bytes available in the read buffer if (gptr() < egptr()) return traits_type::to_int_type(*gptr()); // calculate the number of bytes we will allow to be put back std::streamsize put_back_num = std::streamsize(gptr() - eback()); if (put_back_num > PUT_BACK_MAX) put_back_num = PUT_BACK_MAX; // copy the last bytes read to the beginning of the buffer (for put back) if (put_back_num > 0) memmove(m_read_buf+(PUT_BACK_MAX-put_back_num), gptr()-put_back_num, put_back_num); // read data from the TCP connection // note that this has to be an ansynchronous call; otherwise, it cannot // be cancelled by other threads and will block forever (such as during shutdown) boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_read_some(boost::asio::buffer(m_read_buf+PUT_BACK_MAX, connection::READ_BUFFER_SIZE-PUT_BACK_MAX), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); if (m_async_error) return traits_type::eof(); // reset buffer pointers now that data is available setg(m_read_buf+(PUT_BACK_MAX-put_back_num), //< beginning of putback bytes m_read_buf+PUT_BACK_MAX, //< read position m_read_buf+PUT_BACK_MAX+m_bytes_transferred); //< end of buffer // return next character available return traits_type::to_int_type(*gptr()); } /** * this function is called when the write buffer for the stream is full * * @param c character that has not been written yet, or eof() if we are flushing * @return int_type the last character written, or eof() if there was an error */ virtual int_type overflow(int_type c) { if (! traits_type::eq_int_type(c, traits_type::eof())) { // character is not eof -> add it to the end of the write buffer // we can push this to the back of the write buffer because we set // the size of the write buffer to 1 less than the actual size using setp() *pptr() = c; pbump(1); } // flush data in the write buffer by sending it to the TCP connection return ((flush_output() == traits_type::eof()) ? traits_type::eof() : traits_type::not_eof(c)); } /** * writes a sequence of characters * * @param s pointer to a sequence of characters * @param n number of characters in the sequence to write * * @return std::streamsize number of character written */ virtual std::streamsize xsputn(const char_type *s, std::streamsize n) { const std::streamsize bytes_available = std::streamsize(epptr() - pptr()); std::streamsize bytes_sent = 0; if (bytes_available >= n) { // there is enough room in the buffer -> just put it in there memcpy(pptr(), s, n); pbump(n); bytes_sent = n; } else { // there is not enough room left in the buffer if (bytes_available > 0) { // fill up the buffer memcpy(pptr(), s, bytes_available); pbump(bytes_available); } // flush data in the write buffer by sending it to the TCP connection if (flush_output() == traits_type::eof()) return 0; if ((n-bytes_available) >= (WRITE_BUFFER_SIZE-1)) { // the remaining data to send is larger than the buffer available // send it all now rather than buffering boost::mutex::scoped_lock async_lock(m_async_mutex); m_bytes_transferred = 0; m_conn_ptr->async_write(boost::asio::buffer(s+bytes_available, n-bytes_available), boost::bind(&stream_buffer::operation_finished, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); m_async_done.wait(async_lock); bytes_sent = bytes_available + m_bytes_transferred; } else { // the buffer is larger than the remaining data // put remaining data to the beginning of the output buffer memcpy(pbase(), s+bytes_available, n-bytes_available); pbump(n-bytes_available); bytes_sent = n; } } return bytes_sent; } /** * reads a sequence of characters * * @param s pointer to where the sequence of characters will be stored * @param n number of characters in the sequence to read * * @return std::streamsize number of character read */ virtual std::streamsize xsgetn(char_type *s, std::streamsize n) { std::streamsize bytes_remaining = n; while (bytes_remaining > 0) { const std::streamsize bytes_available = std::streamsize(egptr() - gptr()); const std::streamsize bytes_next_read = ((bytes_available >= bytes_remaining) ? bytes_remaining : bytes_available); // copy available input data from buffer if (bytes_next_read > 0) { memcpy(s, gptr(), bytes_next_read); gbump(bytes_next_read); bytes_remaining -= bytes_next_read; s += bytes_next_read; } if (bytes_remaining > 0) { // call underflow() to read more data if (traits_type::eq_int_type(underflow(), traits_type::eof())) break; } } return(n-bytes_remaining); } /** * synchronize buffers with the TCP connection * * @return 0 if successful, -1 if there was an error */ virtual int_type sync(void) { return ((flush_output() == traits_type::eof()) ? -1 : 0); } private: /// function called after an asynchronous operation has completed inline void operation_finished(const boost::system::error_code& error_code, std::size_t bytes_transferred) { boost::mutex::scoped_lock async_lock(m_async_mutex); m_async_error = error_code; m_bytes_transferred = bytes_transferred; m_async_done.notify_one(); } /// pointer to the underlying TCP connection used for reading & writing tcp::connection_ptr m_conn_ptr; /// condition signaled whenever an asynchronous operation has completed boost::mutex m_async_mutex; /// condition signaled whenever an asynchronous operation has completed boost::condition m_async_done; /// used to keep track of the result from the last asynchronous operation boost::system::error_code m_async_error; /// the number of bytes transferred by the last asynchronous operation std::size_t m_bytes_transferred; /// pointer to the start of the TCP connection's read buffer char_type * m_read_buf; /// buffer used to write output char_type m_write_buf[WRITE_BUFFER_SIZE]; }; /// /// stream: std::basic_iostream wrapper for TCP network connections /// class stream : public std::basic_iostream > { public: // data type definitions required for iostream compatability typedef char char_type; typedef std::char_traits::int_type int_type; typedef std::char_traits::off_type off_type; typedef std::char_traits::pos_type pos_type; typedef std::char_traits traits_type; /** * constructs a TCP stream object for an existing TCP connection * * @param conn_ptr pointer to the TCP connection to use for reading & writing */ explicit stream(tcp::connection_ptr& conn_ptr) : m_tcp_buf(conn_ptr) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * constructs a TCP stream object for a new TCP connection * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit stream(boost::asio::io_service& io_service, const bool ssl_flag = false) : m_tcp_buf(io_service, ssl_flag) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * constructs a TCP stream object for a new SSL/TCP connection * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ stream(boost::asio::io_service& io_service, connection::ssl_context_type& ssl_context) : m_tcp_buf(io_service, ssl_context) #ifdef _MSC_VER , std::basic_iostream >(NULL) #endif { // initialize basic_iostream with pointer to the stream buffer std::basic_ios >::init(&m_tcp_buf); } /** * accepts a new tcp connection and performs SSL handshake if necessary * * @param tcp_acceptor object used to accept new connections * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::accept() */ inline boost::system::error_code accept(boost::asio::ip::tcp::acceptor& tcp_acceptor) { boost::system::error_code ec = m_tcp_buf.get_connection().accept(tcp_acceptor); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_server(); return ec; } /** * connects to a remote endpoint and performs SSL handshake if necessary * * @param tcp_endpoint remote endpoint to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(boost::asio::ip::tcp::endpoint& tcp_endpoint) { boost::system::error_code ec = m_tcp_buf.get_connection().connect(tcp_endpoint); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_client(); return ec; } /** * connects to a (IPv4) remote endpoint and performs SSL handshake if necessary * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); boost::system::error_code ec = m_tcp_buf.get_connection().connect(tcp_endpoint); if (! ec && get_ssl_flag()) ec = m_tcp_buf.get_connection().handshake_client(); return ec; } /// closes the tcp connection inline void close(void) { m_tcp_buf.get_connection().close(); } /* Use close instead; basic_socket::cancel is deprecated for Windows XP. /// cancels any asynchronous operations pending on the tcp connection inline void cancel(void) { m_tcp_buf.get_connection().cancel(); } */ /// returns true if the connection is currently open inline bool is_open(void) const { return m_tcp_buf.get_connection().is_open(); } /// returns true if the connection is encrypted using SSL inline bool get_ssl_flag(void) const { return m_tcp_buf.get_connection().get_ssl_flag(); } /// returns the client's IP address inline boost::asio::ip::address get_remote_ip(void) const { return m_tcp_buf.get_connection().get_remote_ip(); } /// returns a pointer to the stream buffer in use stream_buffer *rdbuf(void) { return &m_tcp_buf; } private: /// the underlying TCP stream buffer used for reading & writing stream_buffer m_tcp_buf; }; } // end namespace tcp } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/tcp/connection.hpp0000644000372000001440000006564412314121350021774 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_CONNECTION_HEADER__ #define __PION_TCP_CONNECTION_HEADER__ #ifdef PION_HAVE_SSL #ifdef PION_XCODE // ignore openssl warnings if building with XCode #pragma GCC system_header #endif #include #endif #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// connection: represents a single tcp connection /// class connection : public boost::enable_shared_from_this, private boost::noncopyable { public: /// data type for the connection's lifecycle state enum lifecycle_type { LIFECYCLE_CLOSE, LIFECYCLE_KEEPALIVE, LIFECYCLE_PIPELINED }; /// size of the read buffer enum { READ_BUFFER_SIZE = 8192 }; /// data type for a function that handles TCP connection objects typedef boost::function1 > connection_handler; /// data type for an I/O read buffer typedef boost::array read_buffer_type; /// data type for a socket connection typedef boost::asio::ip::tcp::socket socket_type; #ifdef PION_HAVE_SSL /// data type for an SSL socket connection typedef boost::asio::ssl::stream ssl_socket_type; /// data type for SSL configuration context typedef boost::asio::ssl::context ssl_context_type; #else class ssl_socket_type { public: ssl_socket_type(boost::asio::io_service& io_service) : m_socket(io_service) {} inline socket_type& next_layer(void) { return m_socket; } inline const socket_type& next_layer(void) const { return m_socket; } inline socket_type::lowest_layer_type& lowest_layer(void) { return m_socket.lowest_layer(); } inline const socket_type::lowest_layer_type& lowest_layer(void) const { return m_socket.lowest_layer(); } inline void shutdown(void) {} private: socket_type m_socket; }; typedef int ssl_context_type; #endif /** * creates new shared connection objects * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL * @param finished_handler function called when a server has finished * handling the connection */ static inline boost::shared_ptr create(boost::asio::io_service& io_service, ssl_context_type& ssl_context, const bool ssl_flag, connection_handler finished_handler) { return boost::shared_ptr(new connection(io_service, ssl_context, ssl_flag, finished_handler)); } /** * creates a new connection object * * @param io_service asio service associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL */ explicit connection(boost::asio::io_service& io_service, const bool ssl_flag = false) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, m_ssl_context), m_ssl_flag(ssl_flag), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE) { save_read_pos(NULL, NULL); } /** * creates a new connection object for SSL * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection */ connection(boost::asio::io_service& io_service, ssl_context_type& ssl_context) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, ssl_context), m_ssl_flag(true), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE) { save_read_pos(NULL, NULL); } /// returns true if the connection is currently open inline bool is_open(void) const { return const_cast(m_ssl_socket).lowest_layer().is_open(); } /// closes the tcp socket and cancels any pending asynchronous operations inline void close(void) { if (is_open()) { try { // shutting down SSL will wait forever for a response from the remote end, // which causes it to hang indefinitely if the other end died unexpectedly // if (get_ssl_flag()) m_ssl_socket.shutdown(); // windows seems to require this otherwise it doesn't // recognize that connections have been closed m_ssl_socket.next_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both); } catch (...) {} // ignore exceptions // close the underlying socket (ignore errors) boost::system::error_code ec; m_ssl_socket.next_layer().close(ec); } } /// cancels any asynchronous operations pending on the socket. /// there is no good way to do this on windows until vista or later (0x0600) /// see http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_stream_socket/cancel/overload2.html /// note that the asio docs are misleading because close() is not thread-safe, /// and the suggested #define statements cause WAY too much trouble and heartache inline void cancel(void) { #if !defined(_MSC_VER) || (_WIN32_WINNT >= 0x0600) boost::system::error_code ec; m_ssl_socket.next_layer().cancel(ec); #endif } /// virtual destructor virtual ~connection() { close(); } /** * asynchronously accepts a new tcp connection * * @param tcp_acceptor object used to accept new connections * @param handler called after a new connection has been accepted * * @see boost::asio::basic_socket_acceptor::async_accept() */ template inline void async_accept(boost::asio::ip::tcp::acceptor& tcp_acceptor, AcceptHandler handler) { tcp_acceptor.async_accept(m_ssl_socket.lowest_layer(), handler); } /** * accepts a new tcp connection (blocks until established) * * @param tcp_acceptor object used to accept new connections * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::accept() */ inline boost::system::error_code accept(boost::asio::ip::tcp::acceptor& tcp_acceptor) { boost::system::error_code ec; tcp_acceptor.accept(m_ssl_socket.lowest_layer(), ec); return ec; } /** * asynchronously connects to a remote endpoint * * @param tcp_endpoint remote endpoint to connect to * @param handler called after a new connection has been established * * @see boost::asio::basic_socket_acceptor::async_connect() */ template inline void async_connect(const boost::asio::ip::tcp::endpoint& tcp_endpoint, ConnectHandler handler) { m_ssl_socket.lowest_layer().async_connect(tcp_endpoint, handler); } /** * asynchronously connects to a (IPv4) remote endpoint * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @param handler called after a new connection has been established * * @see boost::asio::basic_socket_acceptor::async_connect() */ template inline void async_connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port, ConnectHandler handler) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); async_connect(tcp_endpoint, handler); } /** * connects to a remote endpoint (blocks until established) * * @param tcp_endpoint remote endpoint to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(boost::asio::ip::tcp::endpoint& tcp_endpoint) { boost::system::error_code ec; m_ssl_socket.lowest_layer().connect(tcp_endpoint, ec); return ec; } /** * connects to a (IPv4) remote endpoint (blocks until established) * * @param remote_addr remote IP address (v4) to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const boost::asio::ip::address& remote_addr, const unsigned int remote_port) { boost::asio::ip::tcp::endpoint tcp_endpoint(remote_addr, remote_port); return connect(tcp_endpoint); } /** * connects to a remote endpoint with hostname lookup * * @param remote_server hostname of the remote server to connect to * @param remote_port remote port number to connect to * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::basic_socket_acceptor::connect() */ inline boost::system::error_code connect(const std::string& remote_server, const unsigned int remote_port) { // query a list of matching endpoints boost::system::error_code ec; boost::asio::ip::tcp::resolver resolver(m_ssl_socket.lowest_layer().get_io_service()); boost::asio::ip::tcp::resolver::query query(remote_server, boost::lexical_cast(remote_port), boost::asio::ip::tcp::resolver::query::numeric_service); boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, ec); if (ec) return ec; // try each one until we are successful ec = boost::asio::error::host_not_found; boost::asio::ip::tcp::resolver::iterator end; while (ec && endpoint_iterator != end) { boost::asio::ip::tcp::endpoint ep(endpoint_iterator->endpoint()); ++endpoint_iterator; ec = connect(ep); if (ec) close(); } return ec; } /** * asynchronously performs client-side SSL handshake for a new connection * * @param handler called after the ssl handshake has completed * * @see boost::asio::ssl::stream::async_handshake() */ template inline void async_handshake_client(SSLHandshakeHandler handler) { #ifdef PION_HAVE_SSL m_ssl_socket.async_handshake(boost::asio::ssl::stream_base::client, handler); m_ssl_flag = true; #endif } /** * asynchronously performs server-side SSL handshake for a new connection * * @param handler called after the ssl handshake has completed * * @see boost::asio::ssl::stream::async_handshake() */ template inline void async_handshake_server(SSLHandshakeHandler handler) { #ifdef PION_HAVE_SSL m_ssl_socket.async_handshake(boost::asio::ssl::stream_base::server, handler); m_ssl_flag = true; #endif } /** * performs client-side SSL handshake for a new connection (blocks until finished) * * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::ssl::stream::handshake() */ inline boost::system::error_code handshake_client(void) { boost::system::error_code ec; #ifdef PION_HAVE_SSL m_ssl_socket.handshake(boost::asio::ssl::stream_base::client, ec); m_ssl_flag = true; #endif return ec; } /** * performs server-side SSL handshake for a new connection (blocks until finished) * * @return boost::system::error_code contains error code if the connection fails * * @see boost::asio::ssl::stream::handshake() */ inline boost::system::error_code handshake_server(void) { boost::system::error_code ec; #ifdef PION_HAVE_SSL m_ssl_socket.handshake(boost::asio::ssl::stream_base::server, ec); m_ssl_flag = true; #endif return ec; } /** * asynchronously reads some data into the connection's read buffer * * @param handler called after the read operation has completed * * @see boost::asio::basic_stream_socket::async_read_some() */ template inline void async_read_some(ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) m_ssl_socket.async_read_some(boost::asio::buffer(m_read_buffer), handler); else #endif m_ssl_socket.next_layer().async_read_some(boost::asio::buffer(m_read_buffer), handler); } /** * asynchronously reads some data into the connection's read buffer * * @param read_buffer the buffer to read data into * @param handler called after the read operation has completed * * @see boost::asio::basic_stream_socket::async_read_some() */ template inline void async_read_some(ReadBufferType read_buffer, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) m_ssl_socket.async_read_some(read_buffer, handler); else #endif m_ssl_socket.next_layer().async_read_some(read_buffer, handler); } /** * reads some data into the connection's read buffer (blocks until finished) * * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::basic_stream_socket::read_some() */ inline std::size_t read_some(boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return m_ssl_socket.read_some(boost::asio::buffer(m_read_buffer), ec); else #endif return m_ssl_socket.next_layer().read_some(boost::asio::buffer(m_read_buffer), ec); } /** * reads some data into the connection's read buffer (blocks until finished) * * @param read_buffer the buffer to read data into * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::basic_stream_socket::read_some() */ template inline std::size_t read_some(ReadBufferType read_buffer, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return m_ssl_socket.read_some(read_buffer, ec); else #endif return m_ssl_socket.next_layer().read_some(read_buffer, ec); } /** * asynchronously reads data into the connection's read buffer until * completion_condition is met * * @param completion_condition determines if the read operation is complete * @param handler called after the read operation has completed * * @see boost::asio::async_read() */ template inline void async_read(CompletionCondition completion_condition, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_read(m_ssl_socket, boost::asio::buffer(m_read_buffer), completion_condition, handler); else #endif boost::asio::async_read(m_ssl_socket.next_layer(), boost::asio::buffer(m_read_buffer), completion_condition, handler); } /** * asynchronously reads data from the connection until completion_condition * is met * * @param buffers one or more buffers into which the data will be read * @param completion_condition determines if the read operation is complete * @param handler called after the read operation has completed * * @see boost::asio::async_read() */ template inline void async_read(const MutableBufferSequence& buffers, CompletionCondition completion_condition, ReadHandler handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_read(m_ssl_socket, buffers, completion_condition, handler); else #endif boost::asio::async_read(m_ssl_socket.next_layer(), buffers, completion_condition, handler); } /** * reads data into the connection's read buffer until completion_condition * is met (blocks until finished) * * @param completion_condition determines if the read operation is complete * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::read() */ template inline std::size_t read(CompletionCondition completion_condition, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::async_read(m_ssl_socket, boost::asio::buffer(m_read_buffer), completion_condition, ec); else #endif return boost::asio::async_read(m_ssl_socket.next_layer(), boost::asio::buffer(m_read_buffer), completion_condition, ec); } /** * reads data from the connection until completion_condition is met * (blocks until finished) * * @param buffers one or more buffers into which the data will be read * @param completion_condition determines if the read operation is complete * @param ec contains error code if the read fails * @return std::size_t number of bytes read * * @see boost::asio::read() */ template inline std::size_t read(const MutableBufferSequence& buffers, CompletionCondition completion_condition, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::read(m_ssl_socket, buffers, completion_condition, ec); else #endif return boost::asio::read(m_ssl_socket.next_layer(), buffers, completion_condition, ec); } /** * asynchronously writes data to the connection * * @param buffers one or more buffers containing the data to be written * @param handler called after the data has been written * * @see boost::asio::async_write() */ template inline void async_write(const ConstBufferSequence& buffers, write_handler_t handler) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) boost::asio::async_write(m_ssl_socket, buffers, handler); else #endif boost::asio::async_write(m_ssl_socket.next_layer(), buffers, handler); } /** * writes data to the connection (blocks until finished) * * @param buffers one or more buffers containing the data to be written * @param ec contains error code if the write fails * @return std::size_t number of bytes written * * @see boost::asio::write() */ template inline std::size_t write(const ConstBufferSequence& buffers, boost::system::error_code& ec) { #ifdef PION_HAVE_SSL if (get_ssl_flag()) return boost::asio::write(m_ssl_socket, buffers, boost::asio::transfer_all(), ec); else #endif return boost::asio::write(m_ssl_socket.next_layer(), buffers, boost::asio::transfer_all(), ec); } /// This function should be called when a server has finished handling /// the connection inline void finish(void) { if (m_finished_handler) m_finished_handler(shared_from_this()); } /// returns true if the connection is encrypted using SSL inline bool get_ssl_flag(void) const { return m_ssl_flag; } /// sets the lifecycle type for the connection inline void set_lifecycle(lifecycle_type t) { m_lifecycle = t; } /// returns the lifecycle type for the connection inline lifecycle_type get_lifecycle(void) const { return m_lifecycle; } /// returns true if the connection should be kept alive inline bool get_keep_alive(void) const { return m_lifecycle != LIFECYCLE_CLOSE; } /// returns true if the HTTP requests are pipelined inline bool get_pipelined(void) const { return m_lifecycle == LIFECYCLE_PIPELINED; } /// returns the buffer used for reading data from the TCP connection inline read_buffer_type& get_read_buffer(void) { return m_read_buffer; } /** * saves a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void save_read_pos(const char *read_ptr, const char *read_end_ptr) { m_read_position.first = read_ptr; m_read_position.second = read_end_ptr; } /** * loads a read position bookmark * * @param read_ptr points to the next character to be consumed in the read_buffer * @param read_end_ptr points to the end of the read_buffer (last byte + 1) */ inline void load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const { read_ptr = m_read_position.first; read_end_ptr = m_read_position.second; } /// returns an ASIO endpoint for the client connection inline boost::asio::ip::tcp::endpoint get_remote_endpoint(void) const { boost::asio::ip::tcp::endpoint remote_endpoint; try { // const_cast is required since lowest_layer() is only defined non-const in asio remote_endpoint = const_cast(m_ssl_socket).lowest_layer().remote_endpoint(); } catch (boost::system::system_error& /* e */) { // do nothing } return remote_endpoint; } /// returns the client's IP address inline boost::asio::ip::address get_remote_ip(void) const { return get_remote_endpoint().address(); } /// returns the client's port number inline unsigned short get_remote_port(void) const { return get_remote_endpoint().port(); } /// returns reference to the io_service used for async operations inline boost::asio::io_service& get_io_service(void) { return m_ssl_socket.lowest_layer().get_io_service(); } /// returns non-const reference to underlying TCP socket object inline socket_type& get_socket(void) { return m_ssl_socket.next_layer(); } /// returns non-const reference to underlying SSL socket object inline ssl_socket_type& get_ssl_socket(void) { return m_ssl_socket; } /// returns const reference to underlying TCP socket object inline const socket_type& get_socket(void) const { return const_cast(m_ssl_socket).next_layer(); } /// returns const reference to underlying SSL socket object inline const ssl_socket_type& get_ssl_socket(void) const { return m_ssl_socket; } protected: /** * protected constructor restricts creation of objects (use create()) * * @param io_service asio service associated with the connection * @param ssl_context asio ssl context associated with the connection * @param ssl_flag if true then the connection will be encrypted using SSL * @param finished_handler function called when a server has finished * handling the connection */ connection(boost::asio::io_service& io_service, ssl_context_type& ssl_context, const bool ssl_flag, connection_handler finished_handler) : #ifdef PION_HAVE_SSL m_ssl_context(io_service, boost::asio::ssl::context::sslv23), m_ssl_socket(io_service, ssl_context), m_ssl_flag(ssl_flag), #else m_ssl_context(0), m_ssl_socket(io_service), m_ssl_flag(false), #endif m_lifecycle(LIFECYCLE_CLOSE), m_finished_handler(finished_handler) { save_read_pos(NULL, NULL); } private: /// data type for a read position bookmark typedef std::pair read_pos_type; /// context object for the SSL connection socket ssl_context_type m_ssl_context; /// SSL connection socket ssl_socket_type m_ssl_socket; /// true if the connection is encrypted using SSL bool m_ssl_flag; /// buffer used for reading data from the TCP connection read_buffer_type m_read_buffer; /// saved read position bookmark read_pos_type m_read_position; /// lifecycle state for the connection lifecycle_type m_lifecycle; /// function called when a server has finished handling the connection connection_handler m_finished_handler; }; /// data type for a connection pointer typedef boost::shared_ptr connection_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/tcp/Makefile.am0000644000372000001440000000034112314121350021137 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_tcp_includedir = $(includedir)/pion/tcp pion_tcp_include_HEADERS = connection.hpp server.hpp stream.hpp timer.hpp pion-5.0.6+dfsg.orig/include/pion/tcp/server.hpp0000644000372000001440000002155212314121350021131 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TCP_SERVER_HEADER__ #define __PION_TCP_SERVER_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp /// /// tcp::server: a multi-threaded, asynchronous TCP server /// class PION_API server : private boost::noncopyable { public: /// default destructor virtual ~server() { if (m_is_listening) stop(false); } /// starts listening for new connections void start(void); /** * stops listening for new connections * * @param wait_until_finished if true, blocks until all pending connections have closed */ void stop(bool wait_until_finished = false); /// the calling thread will sleep until the server has stopped listening for connections void join(void); /** * configures server for SSL using a PEM-encoded RSA private key file * * @param pem_key_file name of the file containing a PEM-encoded private key */ void set_ssl_key_file(const std::string& pem_key_file); /// returns the number of active tcp connections std::size_t get_connections(void) const; /// returns tcp port number that the server listens for connections on inline unsigned int get_port(void) const { return m_endpoint.port(); } /// sets tcp port number that the server listens for connections on inline void set_port(unsigned int p) { m_endpoint.port(p); } /// returns IP address that the server listens for connections on inline boost::asio::ip::address get_address(void) const { return m_endpoint.address(); } /// sets IP address that the server listens for connections on inline void set_address(const boost::asio::ip::address& addr) { m_endpoint.address(addr); } /// returns tcp endpoint that the server listens for connections on inline const boost::asio::ip::tcp::endpoint& get_endpoint(void) const { return m_endpoint; } /// sets tcp endpoint that the server listens for connections on inline void set_endpoint(const boost::asio::ip::tcp::endpoint& ep) { m_endpoint = ep; } /// returns true if the server uses SSL to encrypt connections inline bool get_ssl_flag(void) const { return m_ssl_flag; } /// sets value of SSL flag (true if the server uses SSL to encrypt connections) inline void set_ssl_flag(bool b = true) { m_ssl_flag = b; } /// returns the SSL context for configuration inline connection::ssl_context_type& get_ssl_context_type(void) { return m_ssl_context; } /// returns true if the server is listening for connections inline bool is_listening(void) const { return m_is_listening; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /// returns mutable reference to the TCP connection acceptor inline boost::asio::ip::tcp::acceptor& get_acceptor(void) { return m_tcp_acceptor; } /// returns const reference to the TCP connection acceptor inline const boost::asio::ip::tcp::acceptor& get_acceptor(void) const { return m_tcp_acceptor; } protected: /** * protected constructor so that only derived objects may be created * * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(const unsigned int tcp_port); /** * protected constructor so that only derived objects may be created * * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ explicit server(const boost::asio::ip::tcp::endpoint& endpoint); /** * protected constructor so that only derived objects may be created * * @param sched the scheduler that will be used to manage worker threads * @param tcp_port port number used to listen for new connections (IPv4) */ explicit server(scheduler& sched, const unsigned int tcp_port = 0); /** * protected constructor so that only derived objects may be created * * @param sched the scheduler that will be used to manage worker threads * @param endpoint TCP endpoint used to listen for new connections (see ASIO docs) */ server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint); /** * handles a new TCP connection; derived classes SHOULD override this * since the default behavior does nothing * * @param tcp_conn the new TCP connection to handle */ virtual void handle_connection(tcp::connection_ptr& tcp_conn) { tcp_conn->set_lifecycle(connection::LIFECYCLE_CLOSE); // make sure it will get closed tcp_conn->finish(); } /// called before the TCP server starts listening for new connections virtual void before_starting(void) {} /// called after the TCP server has stopped listing for new connections virtual void after_stopping(void) {} /// returns an async I/O service used to schedule work inline boost::asio::io_service& get_io_service(void) { return m_active_scheduler.get_io_service(); } /// primary logging interface used by this class logger m_logger; private: /// handles a request to stop the server void handle_stop_request(void); /// listens for a new connection void listen(void); /** * handles new connections (checks if there was an accept error) * * @param tcp_conn the new TCP connection (if no error occurred) * @param accept_error true if an error occurred while accepting connections */ void handle_accept(tcp::connection_ptr& tcp_conn, const boost::system::error_code& accept_error); /** * handles new connections following an SSL handshake (checks for errors) * * @param tcp_conn the new TCP connection (if no error occurred) * @param handshake_error true if an error occurred during the SSL handshake */ void handle_ssl_handshake(tcp::connection_ptr& tcp_conn, const boost::system::error_code& handshake_error); /// This will be called by connection::finish() after a server has /// finished handling a connection. If the keep_alive flag is true, /// it will call handle_connection(); otherwise, it will close the /// connection and remove it from the server's management pool void finish_connection(tcp::connection_ptr& tcp_conn); /// prunes orphaned connections that did not close cleanly /// and returns the remaining number of connections in the pool std::size_t prune_connections(void); /// data type for a pool of TCP connections typedef std::set ConnectionPool; /// the default scheduler object used to manage worker threads single_service_scheduler m_default_scheduler; /// reference to the active scheduler object used to manage worker threads scheduler & m_active_scheduler; /// manages async TCP connections boost::asio::ip::tcp::acceptor m_tcp_acceptor; /// context used for SSL configuration connection::ssl_context_type m_ssl_context; /// condition triggered when the server has stopped listening for connections boost::condition m_server_has_stopped; /// condition triggered when the connection pool is empty boost::condition m_no_more_connections; /// pool of active connections associated with this server ConnectionPool m_conn_pool; /// tcp endpoint used to listen for new connections boost::asio::ip::tcp::endpoint m_endpoint; /// true if the server uses SSL to encrypt connections bool m_ssl_flag; /// set to true when the server is listening for new connections bool m_is_listening; /// mutex to make class thread-safe mutable boost::mutex m_mutex; }; /// data type for a server pointer typedef boost::shared_ptr server_ptr; } // end namespace tcp } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/error.hpp0000644000372000001440000002025212314121350020162 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ERROR_HEADER__ #define __PION_ERROR_HEADER__ #include #include #include #include #include #include #include #include #include #if BOOST_VERSION >= 104700 #include #endif #include namespace pion { // begin namespace pion // // exception: simple exception class for pion errors that generates what() // strings with more descriptive messages and optionally arguments as well // class exception : public virtual std::exception, public virtual boost::exception { public: exception() {} exception(const std::string& msg) : m_what_msg(msg) {} exception(const char * const msg) : m_what_msg(msg) {} virtual ~exception() throw () {} virtual const char* what() const throw() { if (m_what_msg.empty()) update_what_msg(); return m_what_msg.c_str(); } protected: inline void set_what_msg(const char * const msg = NULL, const std::string * const arg1 = NULL, const std::string * const arg2 = NULL, const std::string * const arg3 = NULL) const { std::ostringstream tmp; #if BOOST_VERSION >= 104700 tmp << ( msg ? msg : boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(*this).type_->name()) ); #else tmp << ( msg ? msg : boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(*this).type_.name()) ); #endif if (arg1 || arg2 || arg3) tmp << ':'; if (arg1) tmp << ' ' << *arg1; if (arg2) tmp << ' ' << *arg2; if (arg3) tmp << ' ' << *arg3; m_what_msg = tmp.str(); } virtual void update_what_msg() const { set_what_msg(); } mutable std::string m_what_msg; }; /** * static method that generates a meaningful diagnostic message from exceptions * * @param e reference to an exception object * @return std::string descriptive error message */ template static inline std::string diagnostic_information( T const & e ) { boost::exception const * const be = dynamic_cast(&e); std::exception const * const se = dynamic_cast(&e); std::ostringstream tmp; if (se) { tmp << se->what(); } else { #if BOOST_VERSION >= 104700 tmp << boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(e).type_->name()); #else tmp << boost::units::detail::demangle(BOOST_EXCEPTION_DYNAMIC_TYPEID(e).type_.name()); #endif } if (be) { //char const * const * fn=boost::get_error_info(*be); //if (fn) tmp << " at " << *fn; char const * const * f=boost::get_error_info(*be); if (f) { tmp << " [" << *f; if (int const * l=boost::get_error_info(*be)) tmp << ':' << *l; tmp << "]"; } } return tmp.str(); } namespace error { // begin namespace error // // pion error info types // /// generic error message typedef boost::error_info errinfo_message; /// name of an unrecognized configuration argument or option typedef boost::error_info errinfo_arg_name; /// file name/path typedef boost::error_info errinfo_file_name; /// directory name/path typedef boost::error_info errinfo_dir_name; /// plugin identifier typedef boost::error_info errinfo_plugin_name; /// plugin symbol name typedef boost::error_info errinfo_symbol_name; // // pion exception types // /// exception thrown for an invalid configuration argument or option class bad_arg : public pion::exception { virtual void update_what_msg() const { set_what_msg("bad argument", boost::get_error_info(*this)); } }; /// exception thrown if there is an error parsing a configuration file class bad_config : public pion::exception { virtual void update_what_msg() const { set_what_msg("config parser error", boost::get_error_info(*this)); } }; /// exception thrown if we failed to open a file class open_file : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to open file", boost::get_error_info(*this)); } }; /// exception thrown if we are unable to open a plugin class open_plugin : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to open plugin", boost::get_error_info(*this)); } }; /// exception thrown if we failed to read data from a file class read_file : public pion::exception { virtual void update_what_msg() const { set_what_msg("unable to read file", boost::get_error_info(*this)); } }; /// exception thrown if a file is not found class file_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("file not found", boost::get_error_info(*this)); } }; /// exception thrown if a required directory is not found class directory_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("directory not found", boost::get_error_info(*this)); } }; /// exception thrown if a plugin cannot be found class plugin_not_found : public pion::exception { virtual void update_what_msg() const { set_what_msg("plugin not found", boost::get_error_info(*this)); } }; /// exception thrown if we try to add or load a duplicate plugin class duplicate_plugin : public pion::exception { virtual void update_what_msg() const { set_what_msg("duplicate plugin", boost::get_error_info(*this)); } }; /// exception thrown if a plugin is missing a required symbol class plugin_missing_symbol : public pion::exception { virtual void update_what_msg() const { set_what_msg("missing plugin symbol", boost::get_error_info(*this)); } }; /// exception thrown if a plugin has an undefined state class plugin_undefined : public pion::exception { virtual void update_what_msg() const { set_what_msg("plugin has undefined state"); } }; /// exception thrown if a bad password hash is provided class bad_password_hash : public pion::exception { virtual void update_what_msg() const { set_what_msg("bad password hash"); } }; } // end namespace error } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/config.hpp.win0000644000372000001440000001102212314121350021065 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PIONCONFIG_HEADER__ #define __PION_PIONCONFIG_HEADER__ // DO NOT USE autoheader ; this file is not automanaged!!! // Other libraries should be added here as they become part of the configuration // used for binary releases. #ifdef PION_FULL #define PION_USE_LOG4CPLUS #define PION_HAVE_SSL #define PION_HAVE_JSON #define PION_HAVE_PYTHON #endif /* Define to the version number of pion. */ #define PION_VERSION "5.0.6" /* Define to the directory where Pion plug-ins are installed. */ //#undef PION_PLUGINS_DIRECTORY #define PION_PLUGINS_DIRECTORY "." /* Define to the directory where cygwin is installed. */ #undef PION_CYGWIN_DIRECTORY /* Define to 1 if C library supports malloc_trim() */ #undef PION_HAVE_MALLOC_TRIM // ----------------------------------------------------------------------- // hash_map support // // At least one of the following options should be defined. /* Define to 1 if you have the header file. */ #undef PION_HAVE_EXT_HASH_MAP /* Define to 1 if you have the header file. */ //#undef PION_HAVE_HASH_MAP #define PION_HAVE_HASH_MAP 1 /* Define to 1 if you have the header file. */ #undef PION_HAVE_UNORDERED_MAP // ----------------------------------------------------------------------- // Logging Options // // At most one of the logging options below should be defined. If none of // them are defined, std::cout and std::cerr will be used for logging. /* To use the `log4cplus' library for logging, include PION_USE_LOG4CPLUS or PION_FULL in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CPLUS /* To use the `log4cxx' library for logging, include PION_USE_LOG4CXX in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CXX /* To use the `log4cpp' library for logging, include PION_USE_LOG4CPP in Preprocessor Definitions, or uncomment the following line. */ //#define PION_USE_LOG4CPP /* To disable logging, include PION_DISABLE_LOGGING in Preprocessor Definitions, or uncomment the following line. */ //#define PION_DISABLE_LOGGING // ----------------------------------------------------------------------- /* Define to 1 if you have the `zlib' library. */ #undef PION_HAVE_ZLIB /* Define to 1 if you have the `bzlib' library. */ #undef PION_HAVE_BZLIB /* If you have the `OpenSSL' library installed, include PION_HAVE_SSL or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use SSL. */ //#define PION_HAVE_SSL #if defined(PION_HAVE_SSL) && !defined(PION_CMAKE_BUILD) #if defined _DEBUG #pragma comment(lib, "ssleay32d") #pragma comment(lib, "libeay32d") #else #pragma comment(lib, "ssleay32") #pragma comment(lib, "libeay32") #endif #endif /* If you have the `yajl' library installed, include PION_HAVE_JSON or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use yajl. */ //#define PION_HAVE_JSON /* If you have the `python' library installed, include PION_HAVE_PYTHON or PION_FULL in Preprocessor Definitions, or uncomment the following line, to use python. */ //#define PION_HAVE_PYTHON #if defined(_WIN32) || defined(_WINDOWS) #define PION_WIN32 1 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #else #error PionConfig.hpp.win is for Win32 only. #endif // _WIN32 #include #ifdef _MSC_VER #ifdef PION_EXPORTS #define PION_API __declspec(dllexport) #elif defined PION_STATIC_LINKING #define PION_API #else #define PION_API __declspec(dllimport) #endif #ifdef PION_STATIC_LINKING #define PION_PLUGIN #else #define PION_PLUGIN __declspec(dllexport) #endif /* Verify correctness of the PION_STATIC_LINKING setup */ #ifdef PION_STATIC_LINKING #ifdef _USRDLL #error Need to be compiled as a static library for PION_STATIC_LINKING #endif #endif #endif // _MSC_VER #endif //__PION_PIONCONFIG_HEADER__ pion-5.0.6+dfsg.orig/include/pion/plugin_manager.hpp0000644000372000001440000003546312314121350022033 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_MANAGER_HEADER__ #define __PION_PLUGIN_MANAGER_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// plugin_manager: used to manage a collection of plug-in objects /// template class plugin_manager { public: /// data type for a function that may be called by the run() method typedef boost::function1 PluginRunFunction; /// data type for a function that may be called by the getStat() method typedef boost::function1 PluginStatFunction; /// default constructor plugin_manager(void) {} /// default destructor virtual ~plugin_manager() {} /// clears all the plug-in objects being managed inline void clear(void) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.clear(); } /// returns true if there are no plug-in objects being managed inline bool empty(void) const { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); return m_plugin_map.empty(); } /** * adds a new plug-in object * * @param plugin_id unique identifier associated with the plug-in * @param plugin_object_ptr pointer to the plug-in object to add */ inline void add(const std::string& plugin_id, PluginType *plugin_object_ptr); /** * removes a plug-in object * * @param plugin_id unique identifier associated with the plug-in */ inline void remove(const std::string& plugin_id); /** * replaces an existing plug-in object with a new one * * @param plugin_id unique identifier associated with the plug-in * @param plugin_ptr pointer to the new plug-in object which will replace the old one */ inline void replace(const std::string& plugin_id, PluginType *plugin_ptr); /** * clones an existing plug-in object (creates a new one of the same type) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the new plug-in object */ inline PluginType *clone(const std::string& plugin_id); /** * loads a new plug-in object * * @param plugin_id unique identifier associated with the plug-in * @param plugin_type the name or type of the plug-in to load (searches * plug-in directories and appends extensions) * @return PluginType* pointer to the new plug-in object */ inline PluginType *load(const std::string& plugin_id, const std::string& plugin_type); /** * gets the plug-in object associated with a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline PluginType *get(const std::string& plugin_id); /** * gets the plug-in object associated with a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline const PluginType *get(const std::string& plugin_id) const; /** * gets a smart pointer to the plugin shared library for a particular plugin_id (exact match) * * @param plugin_id unique identifier associated with the plug-in * @return plugin_ptr pointer to the plugin shared library if found */ inline plugin_ptr get_lib_ptr(const std::string& plugin_id) const; /** * finds the plug-in object associated with a particular resource (fuzzy match) * * @param resource resource identifier (uri-stem) to search for * @return PluginType* pointer to the matching plug-in object or NULL if not found */ inline PluginType *find(const std::string& resource); /** * runs a method for every plug-in being managed * * @param run_func the function to execute for each plug-in object */ inline void run(PluginRunFunction run_func); /** * runs a method for a particular plug-in * * @param plugin_id unique identifier associated with the plug-in * @param run_func the function to execute */ inline void run(const std::string& plugin_id, PluginRunFunction run_func); /** * returns a total statistic value summed for every plug-in being managed * * @param stat_func the statistic function to execute for each plug-in object */ inline boost::uint64_t get_statistic(PluginStatFunction stat_func) const; /** * returns a statistic value for a particular plug-in * * @param plugin_id unique identifier associated with the plug-in * @param stat_func the statistic function to execute */ inline boost::uint64_t get_statistic(const std::string& plugin_id, PluginStatFunction stat_func) const; protected: /// data type that maps identifiers to plug-in objects class map_type : public std::map > > { public: inline void clear(void); virtual ~map_type() { map_type::clear(); } map_type(void) {} }; /// collection of plug-in objects being managed map_type m_plugin_map; /// mutex to make class thread-safe mutable boost::mutex m_plugin_mutex; }; // plugin_manager member functions template inline void plugin_manager::add(const std::string& plugin_id, PluginType *plugin_object_ptr) { plugin_ptr plugin_ptr; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.insert(std::make_pair(plugin_id, std::make_pair(plugin_object_ptr, plugin_ptr))); } template inline void plugin_manager::remove(const std::string& plugin_id) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } m_plugin_map.erase(i); } template inline void plugin_manager::replace(const std::string& plugin_id, PluginType *plugin_ptr) { BOOST_ASSERT(plugin_ptr); boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } i->second.first = plugin_ptr; } template inline PluginType *plugin_manager::clone(const std::string& plugin_id) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i == m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); return i->second.second.create(); } template inline PluginType *plugin_manager::load(const std::string& plugin_id, const std::string& plugin_type) { // search for the plug-in file using the configured paths if (m_plugin_map.find(plugin_id) != m_plugin_map.end()) BOOST_THROW_EXCEPTION( error::duplicate_plugin() << error::errinfo_plugin_name(plugin_id) ); // open up the plug-in's shared object library plugin_ptr plugin_ptr; plugin_ptr.open(plugin_type); // may throw // create a new object using the plug-in library PluginType *plugin_object_ptr(plugin_ptr.create()); // add the new plug-in object to our map boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); m_plugin_map.insert(std::make_pair(plugin_id, std::make_pair(plugin_object_ptr, plugin_ptr))); return plugin_object_ptr; } template inline PluginType *plugin_manager::get(const std::string& plugin_id) { PluginType *plugin_object_ptr = NULL; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_object_ptr = i->second.first; return plugin_object_ptr; } template inline const PluginType *plugin_manager::get(const std::string& plugin_id) const { const PluginType *plugin_object_ptr = NULL; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_object_ptr = i->second.first; return plugin_object_ptr; } template inline plugin_ptr plugin_manager::get_lib_ptr(const std::string& plugin_id) const { plugin_ptr plugin_ptr; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.find(plugin_id); if (i != m_plugin_map.end()) plugin_ptr = i->second.second; return plugin_ptr; } template inline PluginType *plugin_manager::find(const std::string& resource) { // will point to the matching plug-in object, if found PluginType *plugin_object_ptr = NULL; // lock mutex for thread safety (this should probably use ref counters) boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); // check if no plug-ins are being managed if (m_plugin_map.empty()) return plugin_object_ptr; // iterate through each plug-in whose identifier may match the resource typename pion::plugin_manager::map_type::iterator i = m_plugin_map.upper_bound(resource); while (i != m_plugin_map.begin()) { --i; // keep checking while the first part of the strings match if (resource.compare(0, i->first.size(), i->first) != 0) { // the first part no longer matches if (i != m_plugin_map.begin()) { // continue to next plug-in in list if its size is < this one typename pion::plugin_manager::map_type::iterator j=i; --j; if (j->first.size() < i->first.size()) continue; } // otherwise we've reached the end; stop looking for a match break; } // only if the resource matches the plug-in's identifier // or if resource is followed first with a '/' character if (resource.size() == i->first.size() || resource[i->first.size()]=='/') { plugin_object_ptr = i->second.first; break; } } return plugin_object_ptr; } template inline void plugin_manager::run(PluginRunFunction run_func) { boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); for (typename pion::plugin_manager::map_type::iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) { run_func(i->second.first); } } template inline void plugin_manager::run(const std::string& plugin_id, PluginRunFunction run_func) { // no need to lock (handled by plugin_manager::get()) PluginType *plugin_object_ptr = get(plugin_id); if (plugin_object_ptr == NULL) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); run_func(plugin_object_ptr); } template inline boost::uint64_t plugin_manager::get_statistic(PluginStatFunction stat_func) const { boost::uint64_t stat_value = 0; boost::mutex::scoped_lock plugins_lock(m_plugin_mutex); for (typename pion::plugin_manager::map_type::const_iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) { stat_value += stat_func(i->second.first); } return stat_value; } template inline boost::uint64_t plugin_manager::get_statistic(const std::string& plugin_id, PluginStatFunction stat_func) const { // no need to lock (handled by plugin_manager::get()) const PluginType *plugin_object_ptr = const_cast*>(this)->get(plugin_id); if (plugin_object_ptr == NULL) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_id) ); return stat_func(plugin_object_ptr); } // plugin_manager::map_type member functions template inline void plugin_manager::map_type::clear(void) { if (! std::map > >::empty()) { for (typename pion::plugin_manager::map_type::iterator i = std::map > >::begin(); i != std::map > >::end(); ++i) { if (i->second.second.is_open()) { i->second.second.destroy(i->second.first); } else { delete i->second.first; } } this->erase(std::map > >::begin(), std::map > >::end()); } } } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/test/0000755000372000001440000000000012314121442017300 5ustar robertouserspion-5.0.6+dfsg.orig/include/pion/test/unit_test.hpp0000644000372000001440000004235012314121350022031 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_TEST_UNIT_TEST_HEADER__ #define __PION_TEST_UNIT_TEST_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #ifdef _MSC_VER #include #define CHANGE_DIRECTORY _chdir #define GET_DIRECTORY(a,b) _getcwd(a,b) #else #include #define CHANGE_DIRECTORY chdir #define GET_DIRECTORY(a,b) getcwd(a,b) #endif #define DIRECTORY_MAX_SIZE 1000 namespace pion { // begin namespace pion namespace test { // begin namespace test /// thread-safe version of Boost.Test's xml_log_formatter class class safe_xml_log_formatter : public boost::unit_test::unit_test_log_formatter { public: /// default constructor safe_xml_log_formatter() : m_entry_in_progress(false) {} /// virtual destructor virtual ~safe_xml_log_formatter() {} /// wrapper to flush output for xml_log_formatter::log_start virtual void log_start(std::ostream& ostr, boost::unit_test::counter_t test_cases_amount ) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_finish virtual void log_finish(std::ostream& ostr) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_build_info virtual void log_build_info(std::ostream& ostr) { ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_start virtual void test_unit_start(std::ostream& ostr, boost::unit_test::test_unit const& tu ) { ostr << "<" << tu_type_name( tu ) << " name" << attr_value() << tu.p_name.get() << ">" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_finish virtual void test_unit_finish(std::ostream& ostr, boost::unit_test::test_unit const& tu, unsigned long elapsed ) { if ( tu.p_type == boost::unit_test::tut_case ) ostr << "" << elapsed << ""; ostr << "" << std::endl; } /// wrapper to flush output for xml_log_formatter::test_unit_skipped virtual void test_unit_skipped(std::ostream& ostr, boost::unit_test::test_unit const& tu ) { ostr << "<" << tu_type_name( tu ) << " name" << attr_value() << tu.p_name.get() << " skipped" << attr_value() << "yes" << "/>" << std::endl; } /// wrapper to flush output for xml_log_formatter::log_exception virtual void log_exception(std::ostream& ostr, boost::unit_test::log_checkpoint_data const& checkpoint_data, boost::execution_exception const& ex ) { boost::execution_exception::location const& loc = ex.where(); ostr << "" << boost::unit_test::cdata() << ex.what(); if( !checkpoint_data.m_file_name.is_empty() ) { ostr << "" << boost::unit_test::cdata() << checkpoint_data.m_message << ""; } ostr << "" << std::endl; } /// thread-safe wrapper for xml_log_formatter::log_entry_start virtual void log_entry_start( std::ostream& ostr, boost::unit_test::log_entry_data const& entry_data, log_entry_types let ) { boost::mutex::scoped_lock entry_lock(m_mutex); while (m_entry_in_progress) { m_entry_complete.wait(entry_lock); } m_entry_in_progress = true; static boost::unit_test::literal_string xml_tags[] = { "Info", "Message", "Warning", "Error", "FatalError" }; m_curr_tag = xml_tags[let]; ostr << '<' << m_curr_tag << BOOST_TEST_L( " file" ) << attr_value() << entry_data.m_file_name << BOOST_TEST_L( " line" ) << attr_value() << entry_data.m_line_num << BOOST_TEST_L( ">" ) << std::endl; m_curr_tag.clear(); m_entry_in_progress = false; m_entry_complete.notify_one(); } } private: /// output appropriate xml element name static boost::unit_test::const_string tu_type_name( boost::unit_test::test_unit const& tu ) { return tu.p_type == boost::unit_test::tut_case ? "TestCase" : "TestSuite"; } /// re-use attr_value data type from xml_printer.hpp typedef boost::unit_test::attr_value attr_value; /// true if a log entry is in progress volatile bool m_entry_in_progress; /// condition used to signal the completion of a log entry boost::condition m_entry_complete; /// mutex used to prevent multiple threads from interleaving entries boost::mutex m_mutex; /// current xml tag boost::unit_test::const_string m_curr_tag; }; /// config is intended for use as a global fixture. By including the /// following line in one source code file of a unit test project, the constructor will /// run once before the first test and the destructor will run once after the last test: /// /// BOOST_GLOBAL_FIXTURE(pion::test::config); struct config { config() { std::cout << "global setup for all pion unit tests\n"; // argc and argv do not include parameters handled by the boost unit test framework, such as --log_level. int argc = boost::unit_test::framework::master_test_suite().argc; char** argv = boost::unit_test::framework::master_test_suite().argv; bool verbose = false; if (argc > 1) { if (argv[1][0] == '-' && argv[1][1] == 'v') { verbose = true; } else if (strlen(argv[1]) > 13 && strncmp(argv[1], "--log_output=", 13) == 0) { const char * const test_log_filename = argv[1] + 13; m_test_log_file.open(test_log_filename); if (m_test_log_file.is_open()) { boost::unit_test::unit_test_log.set_stream(m_test_log_file); boost::unit_test::unit_test_log.set_formatter(new safe_xml_log_formatter); } else { std::cerr << "unable to open " << test_log_filename << std::endl; } } } if (verbose) { PION_LOG_CONFIG_BASIC; } else { std::cout << "Use '-v' to enable logging of errors and warnings from pion.\n"; } pion::logger log_ptr = PION_GET_LOGGER("pion"); PION_LOG_SETLEVEL_WARN(log_ptr); } virtual ~config() { std::cout << "global teardown for all pion unit tests\n"; } /// xml log results output stream (needs to be global) static std::ofstream m_test_log_file; }; // removes line endings from a c-style string static inline char* trim(char* str) { for (long len = strlen(str) - 1; len >= 0; len--) { if (str[len] == '\n' || str[len] == '\r') str[len] = '\0'; else break; } return str; } // reads lines from a file, stripping line endings and ignoring blank lines // and comment lines (starting with a '#') static inline bool read_lines_from_file(const std::string& filename, std::list& lines) { // open file std::ifstream a_file(filename.c_str(), std::ios::in | std::ios::binary); if (! a_file.is_open()) return false; // read data from file static const unsigned int BUF_SIZE = 4096; char *ptr, buf[BUF_SIZE+1]; buf[BUF_SIZE] = '\0'; lines.clear(); while (a_file.getline(buf, BUF_SIZE)) { ptr = trim(buf); if (*ptr != '\0' && *ptr != '#') lines.push_back(ptr); } // close file a_file.close(); return true; } // Check for file match, use std::list for sorting the files, which will allow // random order matching... static inline bool check_files_match(const std::string& fileA, const std::string& fileB) { // open and read data from files std::list a_lines, b_lines; BOOST_REQUIRE(read_lines_from_file(fileA, a_lines)); BOOST_REQUIRE(read_lines_from_file(fileB, b_lines)); // sort lines read a_lines.sort(); b_lines.sort(); // files match if lines match return (a_lines == b_lines); } static inline bool check_files_exact_match(const std::string& fileA, const std::string& fileB, bool ignore_line_endings = false) { // open files std::ifstream a_file(fileA.c_str(), std::ios::in | std::ios::binary); BOOST_REQUIRE(a_file.is_open()); std::ifstream b_file(fileB.c_str(), std::ios::in | std::ios::binary); BOOST_REQUIRE(b_file.is_open()); // read and compare data in files static const unsigned int BUF_SIZE = 4096; char a_buf[BUF_SIZE]; char b_buf[BUF_SIZE]; if (ignore_line_endings) { while (a_file.getline(a_buf, BUF_SIZE)) { if (! b_file.getline(b_buf, BUF_SIZE)) return false; trim(a_buf); trim(b_buf); if (strlen(a_buf) != strlen(b_buf)) return false; if (memcmp(a_buf, b_buf, strlen(a_buf)) != 0) return false; } if (b_file.getline(b_buf, BUF_SIZE)) return false; } else { while (a_file.read(a_buf, BUF_SIZE)) { if (! b_file.read(b_buf, BUF_SIZE)) return false; if (memcmp(a_buf, b_buf, BUF_SIZE) != 0) return false; } if (b_file.read(b_buf, BUF_SIZE)) return false; } if (a_file.gcount() != b_file.gcount()) return false; if (memcmp(a_buf, b_buf, a_file.gcount()) != 0) return false; a_file.close(); b_file.close(); // files match return true; } } // end namespace test } // end namespace pion /* Using BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE and BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE has two additional benefits relative to using BOOST_FIXTURE_TEST_SUITE and BOOST_AUTO_TEST_CASE: 1) it allows a test to be run with more than one fixture, and 2) it makes the current fixture part of the test name, e.g. checkPropertyX For an example of 1), see http_message_tests.cpp. There are probably simpler ways to achieve 2), but since it comes for free, it makes sense to use it. The benefit of this is that the test names don't have to include redundant information about the fixture, e.g. checkMyFixtureHasPropertyX. (In this example, checkPropertyX is not obviously better than checkMyFixtureHasPropertyX, but in many cases the test names become too long and/or hard to parse, or the fixture just isn't part of the name, making some error reports ambiguous.) (BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE is based on BOOST_AUTO_TEST_CASE_TEMPLATE, in unit_test_suite.hpp.) Minimal example demonstrating usage of BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE: class ObjectToTest_F { // suffix _F is used for fixtures public: ObjectToTest_F() { m_value = 2; } int m_value; int get_value() { return m_value; } }; // This illustrates the most common case, where just one fixture will be used, // so the list only has one fixture in it. // ObjectToTest_S is the name of the test suite. BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(ObjectToTest_S, boost::mpl::list) // One method for testing the fixture... BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwo) { BOOST_CHECK_EQUAL(F::m_value, 2); BOOST_CHECK_EQUAL(F::get_value(), 2); } // Another method for testing the fixture... BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwoAgain) { BOOST_CHECK_EQUAL(this->m_value, 2); BOOST_CHECK_EQUAL(this->get_value(), 2); } // The simplest, but, alas, non conformant to the C++ standard, method for testing the fixture. // This will compile with MSVC (unless language extensions are disabled (/Za)). // It won't compile with gcc unless -fpermissive is used. // See http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html. BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(checkValueEqualsTwoNonConformant) { BOOST_CHECK_EQUAL(m_value, 2); BOOST_CHECK_EQUAL(get_value(), 2); } BOOST_AUTO_TEST_SUITE_END() */ #define BOOST_AUTO_TEST_SUITE_FIXTURE_TEMPLATE(suite_name, fixture_types) \ BOOST_AUTO_TEST_SUITE(suite_name) \ typedef fixture_types BOOST_AUTO_TEST_CASE_FIXTURE_TYPES; \ /**/ #define BOOST_AUTO_TEST_CASE_FIXTURE_TEMPLATE(test_name) \ template \ struct test_name : public F \ { void test_method(); }; \ \ struct BOOST_AUTO_TC_INVOKER( test_name ) { \ template \ static void run( boost::type* = 0 ) \ { \ test_name t; \ t.test_method(); \ } \ }; \ \ BOOST_AUTO_TU_REGISTRAR( test_name )( \ boost::unit_test::ut_detail::template_test_case_gen< \ BOOST_AUTO_TC_INVOKER( test_name ), \ BOOST_AUTO_TEST_CASE_FIXTURE_TYPES >( \ BOOST_STRINGIZE( test_name ) ) ); \ \ template \ void test_name::test_method() \ /**/ #endif pion-5.0.6+dfsg.orig/include/pion/test/Makefile.in0000644000372000001440000003660412314121400021350 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/pion/test DIST_COMMON = $(pion_test_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pion_test_includedir)" HEADERS = $(pion_test_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pion_test_includedir = $(includedir)/pion/test pion_test_include_HEADERS = unit_test.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/pion/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/pion/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pion_test_includeHEADERS: $(pion_test_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(pion_test_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pion_test_includedir)" @list='$(pion_test_include_HEADERS)'; test -n "$(pion_test_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pion_test_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pion_test_includedir)" || exit $$?; \ done uninstall-pion_test_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pion_test_include_HEADERS)'; test -n "$(pion_test_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pion_test_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pion_test_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pion_test_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pion_test_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pion_test_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pion_test_includeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pion_test_includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/include/pion/test/Makefile.am0000644000372000001440000000030312314121350021326 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_test_includedir = $(includedir)/pion/test pion_test_include_HEADERS = unit_test.hpp pion-5.0.6+dfsg.orig/include/pion/process.hpp0000644000372000001440000001003612314121350020506 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PROCESS_HEADER__ #define __PION_PROCESS_HEADER__ #include #include #include #include #include #include // Dump file generation support on Windows #ifdef _MSC_VER #include #include #include // based on dbghelp.h typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType, CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); #endif namespace pion { // begin namespace pion /// /// process: class for managing process/service related functions /// class PION_API process : private boost::noncopyable { public: // default destructor ~process() {} /// default constructor process(void) {} /// signals the shutdown condition static void shutdown(void); /// blocks until the shutdown condition has been signaled static void wait_for_shutdown(void); /// sets up basic signal handling for the process static void initialize(void); /// fork process and run as a background daemon static void daemonize(void); #ifdef _MSC_VER class dumpfile_init_exception : public std::exception { public: dumpfile_init_exception(const std::string& cause) : m_cause(cause) {} virtual const char* what() const { return m_cause.c_str(); } protected: std::string m_cause; }; /** * enables mini-dump generation on unhandled exceptions (AVs, etc.) * throws an dumpfile_init_exception if unable to set the unhandled exception processing * @param dir file system path to store mini dumps */ static void set_dumpfile_directory(const std::string& dir); protected: /// unhandled exception filter proc static LONG WINAPI unhandled_exception_filter(struct _EXCEPTION_POINTERS *pExceptionInfo); /// generates a name for a dump file static std::string generate_dumpfile_name(); #endif protected: /// data type for static/global process configuration information struct config_type { /// constructor just initializes native types #ifdef _MSC_VER config_type() : shutdown_now(false), h_dbghelp(NULL), p_dump_proc(NULL) {} #else config_type() : shutdown_now(false) {} #endif /// true if we should shutdown now bool shutdown_now; /// triggered when it is time to shutdown boost::condition shutdown_cond; /// used to protect the shutdown condition boost::mutex shutdown_mutex; // Dump file generation support on Windows #ifdef _MSC_VER /// mini-dump file location std::string dumpfile_dir; /// dbghelp.dll library handle HMODULE h_dbghelp; /// address of MiniDumpWriteDump inside dbghelp.dll MINIDUMPWRITEDUMP p_dump_proc; #endif }; /// returns a singleton instance of config_type static inline config_type& get_config(void) { boost::call_once(process::create_config, m_instance_flag); return *m_config_ptr; } private: /// creates the config_type singleton static void create_config(void); /// used to ensure thread safety of the config_type singleton static boost::once_flag m_instance_flag; /// pointer to the config_type singleton static config_type * m_config_ptr; }; } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/hash_map.hpp0000644000372000001440000001166212314121350020616 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_HASH_MAP_HEADER__ #define __PION_HASH_MAP_HEADER__ #include #include #include #include #include #if defined(PION_HAVE_UNORDERED_MAP) && defined(PION_CMAKE_BUILD) // cmake will search for unordered_map without tr1 #include #elif defined(PION_HAVE_UNORDERED_MAP) #include #elif defined(PION_HAVE_EXT_HASH_MAP) #include #elif defined(PION_HAVE_HASH_MAP) #include #endif namespace pion { // begin namespace pion #if defined(PION_HAVE_UNORDERED_MAP) && defined(PION_CMAKE_BUILD) #define PION_HASH_MAP std::unordered_map #define PION_HASH_MULTIMAP std::unordered_multimap #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #elif defined(PION_HAVE_UNORDERED_MAP) #define PION_HASH_MAP std::tr1::unordered_map #define PION_HASH_MULTIMAP std::tr1::unordered_multimap #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #elif defined(PION_HAVE_EXT_HASH_MAP) #if __GNUC__ >= 3 #define PION_HASH_MAP __gnu_cxx::hash_map #define PION_HASH_MULTIMAP __gnu_cxx::hash_multimap #else #define PION_HASH_MAP hash_map #define PION_HASH_MULTIMAP hash_multimap #endif #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #elif defined(PION_HAVE_HASH_MAP) #ifdef _MSC_VER #define PION_HASH_MAP stdext::hash_map #define PION_HASH_MULTIMAP stdext::hash_multimap #define PION_HASH_STRING stdext::hash_compare > #define PION_HASH(TYPE) stdext::hash_compare > #else #define PION_HASH_MAP hash_map #define PION_HASH_MULTIMAP hash_multimap #define PION_HASH_STRING boost::hash #define PION_HASH(TYPE) boost::hash #endif #endif /// case insensitive string equality predicate /// copied from boost.unordered hash_equality documentation /// http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html struct iequal_to : std::binary_function { bool operator()(std::string const& x, std::string const& y) const { return boost::algorithm::iequals(x, y, std::locale()); } }; /// case insensitive hash generic function /// copied from boost.unordered hash_equality documentation /// http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html struct ihash : std::unary_function { std::size_t operator()(std::string const& x) const { std::size_t seed = 0; std::locale locale; for(std::string::const_iterator it = x.begin(); it != x.end(); ++it) { boost::hash_combine(seed, std::toupper(*it, locale)); } return seed; } }; #ifdef _MSC_VER /// Case-insensitive "less than" predicate template struct is_iless : public std::binary_function<_Ty, _Ty, bool> { /// Constructor is_iless( const std::locale& Loc=std::locale() ) : m_Loc( Loc ) {} /// returns true if Arg1 is less than Arg2 bool operator()( const _Ty& Arg1, const _Ty& Arg2 ) const { return _Ty(boost::algorithm::to_upper_copy(Arg1, m_Loc)) < _Ty(boost::algorithm::to_upper_copy(Arg2, m_Loc)); } private: std::locale m_Loc; }; /// case insensitive extension of stdext::hash_compare for std::string struct ihash_windows : public stdext::hash_compare > { // makes operator() with two arguments visible, otherwise it would be hidden by the operator() defined here using stdext::hash_compare >::operator(); inline size_t operator()(const std::string& str) const { return ihash()(str); } }; /// data type for case-insensitive dictionary of strings typedef PION_HASH_MULTIMAP ihash_multimap; #else /// data type for case-insensitive dictionary of strings typedef PION_HASH_MULTIMAP ihash_multimap; #endif } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/plugin.hpp0000644000372000001440000003660712314121350020342 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_PLUGIN_HEADER__ #define __PION_PLUGIN_HEADER__ #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// plugin: base class for plug-in management /// class PION_API plugin { public: /** * searches directories for a valid plug-in file * * @param path_to_file the path to the plug-in file, if found * @param the name name of the plug-in to search for * @return true if the plug-in file was found */ static inline bool find_plugin_file(std::string& path_to_file, const std::string& name) { return find_file(path_to_file, name, PION_PLUGIN_EXTENSION); } /** * searches directories for a valid plug-in configuration file * * @param path_to_file if found, is set to the complete path to the file * @param name the name of the configuration file to search for * @return true if the configuration file was found */ static inline bool find_config_file(std::string& path_to_file, const std::string& name) { return find_file(path_to_file, name, PION_CONFIG_EXTENSION); } /** * adds an entry point for a plugin that is statically linked * NOTE: USE PION_DECLARE_PLUGIN() macro instead!!! * * @param plugin_name the name of the plugin to add * @param create_func - pointer to the function to be used in to create plugin object * @param destroy_func - pointer to the function to be used to release plugin object */ static void add_static_entry_point(const std::string& plugin_name, void *create_func, void *destroy_func); /** * updates path for cygwin oddities, if necessary * * @param final_path path object for the file, will be modified if necessary * @param start_path original path to the file. if final_path is not valid, * this will be appended to PION_CYGWIN_DIRECTORY to attempt * attempt correction of final_path for cygwin */ static void check_cygwin_path(boost::filesystem::path& final_path, const std::string& path_string); /// appends a directory to the plug-in search path static void add_plugin_directory(const std::string& dir); /// clears all directories from the plug-in search path static void reset_plugin_directories(void); // default destructor virtual ~plugin() { release_data(); } /// returns true if a shared library is loaded/open inline bool is_open(void) const { return (m_plugin_data != NULL); } /// returns the name of the plugin that is currently open inline std::string get_plugin_name(void) const { return (is_open() ? m_plugin_data->m_plugin_name : std::string()); } /// returns a list of all Plugins found in all Plugin directories static void get_all_plugin_names(std::vector& plugin_names); /** * opens plug-in library within a shared object file. If the library is * already being used by another plugin object, then the existing * code will be re-used and the reference count will be increased. Beware * that this does NOT check the plug-in's base class (InterfaceClassType), * so you must be careful to ensure that the namespace is unique between * plug-ins that have different base classes. If the plug-in's name matches * an existing plug-in of a different base class, the resulting behavior is * undefined (it will probably crash your program). * * @param plugin_name name of the plug-in library to open (without extension, etc.) */ void open(const std::string& plugin_name); /** * opens plug-in library within a shared object file. If the library is * already being used by another plugin object, then the existing * code will be re-used and the reference count will be increased. Beware * that this does NOT check the plug-in's base class (InterfaceClassType), * so you must be careful to ensure that the namespace is unique between * plug-ins that have different base classes. If the plug-in's name matches * an existing plug-in of a different base class, the resulting behavior is * undefined (it will probably crash your program). * * @param plugin_file shared object file containing the plugin code */ void open_file(const std::string& plugin_file); /// closes plug-in library inline void close(void) { release_data(); } protected: /// /// data_type: object to hold shared library symbols /// struct data_type { /// default constructors for convenience data_type(void) : m_lib_handle(NULL), m_create_func(NULL), m_destroy_func(NULL), m_references(0) {} data_type(const std::string& plugin_name) : m_lib_handle(NULL), m_create_func(NULL), m_destroy_func(NULL), m_plugin_name(plugin_name), m_references(0) {} data_type(const data_type& p) : m_lib_handle(p.m_lib_handle), m_create_func(p.m_create_func), m_destroy_func(p.m_destroy_func), m_plugin_name(p.m_plugin_name), m_references(p.m_references) {} /// symbol library loaded from a shared object file void * m_lib_handle; /// function used to create instances of the plug-in object void * m_create_func; /// function used to destroy instances of the plug-in object void * m_destroy_func; /// the name of the plugin (must be unique per process) std::string m_plugin_name; /// number of references to this class unsigned long m_references; }; /// default constructor is private (use plugin_ptr class to create objects) plugin(void) : m_plugin_data(NULL) {} /// copy constructor plugin(const plugin& p) : m_plugin_data(NULL) { grab_data(p); } /// assignment operator plugin& operator=(const plugin& p) { grab_data(p); return *this; } /// returns a pointer to the plug-in's "create object" function inline void *get_create_function(void) { return (is_open() ? m_plugin_data->m_create_func : NULL); } /// returns a pointer to the plug-in's "destroy object" function inline void *get_destroy_function(void) { return (is_open() ? m_plugin_data->m_destroy_func : NULL); } /// releases the plug-in's shared library symbols void release_data(void); /// grabs a reference to another plug-in's shared library symbols void grab_data(const plugin& p); private: /// data type that maps plug-in names to their shared library data typedef std::map map_type; /// data type for static/global plugin configuration information struct config_type { /// directories containing plugin files std::vector m_plugin_dirs; /// maps plug-in names to shared library data map_type m_plugin_map; /// mutex to make class thread-safe boost::mutex m_plugin_mutex; }; /// returns a singleton instance of config_type static inline config_type& get_plugin_config(void) { boost::call_once(plugin::create_plugin_config, m_instance_flag); return *m_config_ptr; } /// creates the plugin_config singleton static void create_plugin_config(void); /** * searches directories for a valid plug-in file * * @param path_to_file if found, is set to the complete path to the file * @param name the name of the file to search for * @param extension will be appended to name if name is not found * * @return true if the file was found */ static bool find_file(std::string& path_to_file, const std::string& name, const std::string& extension); /** * normalizes complete and final path to a file while looking for it * * @param final_path if found, is set to the complete, normalized path to the file * @param start_path the original starting path to the file * @param name the name of the file to search for * @param extension will be appended to name if name is not found * * @return true if the file was found */ static bool check_for_file(std::string& final_path, const std::string& start_path, const std::string& name, const std::string& extension); /** * opens plug-in library within a shared object file * * @param plugin_file shared object file containing the plugin code * @param plugin_data data object to load the library into */ static void open_plugin(const std::string& plugin_file, data_type& plugin_data); /// returns the name of the plugin object (based on the plugin_file name) static std::string get_plugin_name(const std::string& plugin_file); /// load a dynamic library from plugin_file and return its handle static void *load_dynamic_library(const std::string& plugin_file); /// close the dynamic library corresponding with lib_handle static void close_dynamic_library(void *lib_handle); /// returns the address of a library symbal static void *get_library_symbol(void *lib_handle, const std::string& symbol); /// name of function defined in object code to create a new plug-in instance static const std::string PION_PLUGIN_CREATE; /// name of function defined in object code to destroy a plug-in instance static const std::string PION_PLUGIN_DESTROY; /// file extension used for Pion plug-in files (platform specific) static const std::string PION_PLUGIN_EXTENSION; /// file extension used for Pion configuration files static const std::string PION_CONFIG_EXTENSION; /// used to ensure thread safety of the plugin_config singleton static boost::once_flag m_instance_flag; /// pointer to the plugin_config singleton static config_type * m_config_ptr; /// points to the shared library and functions used by the plug-in data_type * m_plugin_data; }; /// /// plugin_ptr: smart pointer that manages plug-in code loaded from shared /// object libraries /// template class plugin_ptr : public plugin { protected: /// data type for a function that is used to create object instances typedef InterfaceClassType* CreateObjectFunction(void); /// data type for a function that is used to destroy object instances typedef void DestroyObjectFunction(InterfaceClassType*); public: /// default constructor & destructor plugin_ptr(void) : plugin() {} virtual ~plugin_ptr() {} /// copy constructor plugin_ptr(const plugin_ptr& p) : plugin(p) {} /// assignment operator plugin_ptr& operator=(const plugin_ptr& p) { grab_data(p); return *this; } /// creates a new instance of the plug-in object inline InterfaceClassType *create(void) { CreateObjectFunction *create_func = (CreateObjectFunction*)(get_create_function()); if (create_func == NULL) BOOST_THROW_EXCEPTION( error::plugin_undefined() ); return create_func(); } /// destroys an instance of the plug-in object inline void destroy(InterfaceClassType *object_ptr) { // fix warning ISO C++ forbids casting from pointer-to-object // to pointer to function union { void* v_; DestroyObjectFunction* f_; } Cast; Cast.v_ = get_destroy_function(); DestroyObjectFunction *destroy_func = Cast.f_; if (destroy_func == NULL) BOOST_THROW_EXCEPTION( error::plugin_undefined() ); destroy_func(object_ptr); } }; /// /// plugin_instance_ptr: smart pointer that manages a plug-in instance /// template class plugin_instance_ptr : private boost::noncopyable { public: /// default constructor & destructor plugin_instance_ptr(void) : m_instance_ptr(NULL) {} /// virtual destructor / may be extended virtual ~plugin_instance_ptr() { reset(); } /// reset the instance pointer inline void reset(void) { if (m_instance_ptr) { m_plugin_ptr.destroy(m_instance_ptr); } } /// create a new instance of the given plugin_type inline void create(const std::string& plugin_type) { reset(); m_plugin_ptr.open(plugin_type); m_instance_ptr = m_plugin_ptr.create(); } /// returns true if pointer is empty inline bool empty(void) const { return m_instance_ptr==NULL; } /// return a raw pointer to the instance inline InterfaceClassType *get(void) { return m_instance_ptr; } /// return a reference to the instance inline InterfaceClassType& operator*(void) { return *m_instance_ptr; } /// return a const reference to the instance inline const InterfaceClassType& operator*(void) const { return *m_instance_ptr; } /// return a reference to the instance inline InterfaceClassType* operator->(void) { return m_instance_ptr; } /// return a const reference to the instance inline const InterfaceClassType* operator->(void) const { return m_instance_ptr; } protected: /// smart pointer that manages the plugin's dynamic object code plugin_ptr m_plugin_ptr; /// raw pointer to the plugin instance InterfaceClassType * m_instance_ptr; }; /** * Macros to declare entry points for statically linked plugins in accordance * with the general naming convention. * * Typical use: * @code * PION_DECLARE_PLUGIN(EchoService) * .... * PION_DECLARE_PLUGIN(FileService) * * @endcode * */ #ifdef PION_STATIC_LINKING #define PION_DECLARE_PLUGIN(plugin_name) \ class plugin_name; \ extern "C" plugin_name *pion_create_##plugin_name(void); \ extern "C" void pion_destroy_##plugin_name(plugin_name *plugin_ptr); \ static pion::static_entry_point_helper helper_##plugin_name(#plugin_name, (void*) pion_create_##plugin_name, (void*) pion_destroy_##plugin_name); /// used by PION_DECLARE_PLUGIN to add an entry point for static-linked plugins class static_entry_point_helper { public: static_entry_point_helper(const std::string& name, void *create, void *destroy) { pion::plugin::add_static_entry_point(name, create, destroy); } }; #else #define PION_DECLARE_PLUGIN(plugin_name) #endif } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/user.hpp0000644000372000001440000002074512314121350020016 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_USER_HEADER__ #define __PION_USER_HEADER__ #include #include #include #include #include #include #include #include #include #include #ifdef PION_HAVE_SSL #if defined(__APPLE__) // suppress warnings about OpenSSL being deprecated in OSX #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #include #endif namespace pion { // begin namespace pion /// /// user: base class to store user credentials /// class user : private boost::noncopyable { public: /// construct a new user object user(std::string const &username) : m_username(username) {} /// construct a new user object user(std::string const &username, std::string const &password) : m_username(username) { set_password(password); } /// virtual destructor virtual ~user() {} /// returns user name as a string std::string const & get_username() const { return m_username; } /// returns password for the user (encrypted if SSL is enabled) std::string const & get_password() const { return m_password; } /** * matches password credential for given user * * @param password password credentials */ virtual bool match_password(const std::string& password) const { #ifdef PION_HAVE_SSL unsigned char sha1_hash[SHA_DIGEST_LENGTH]; SHA1(reinterpret_cast(password.data()), password.size(), sha1_hash); return (memcmp(sha1_hash, m_password_hash, SHA_DIGEST_LENGTH) == 0); #else return m_password == password; #endif } /// sets password credentials for given user virtual void set_password(const std::string& password) { #ifdef PION_HAVE_SSL // store encrypted hash value SHA1((const unsigned char *)password.data(), password.size(), m_password_hash); // update password string (convert binary to hex) m_password.clear(); char buf[3]; for (unsigned int n = 0; n < SHA_DIGEST_LENGTH; ++n) { sprintf(buf, "%.2x", static_cast(m_password_hash[n])); m_password += buf; } #else m_password = password; #endif } #ifdef PION_HAVE_SSL /// sets encrypted password credentials for given user virtual void set_password_hash(const std::string& password_hash) { // update password string representation if (password_hash.size() != SHA_DIGEST_LENGTH*2) BOOST_THROW_EXCEPTION( error::bad_password_hash() ); m_password = password_hash; // convert string from hex to binary value char buf[3]; buf[2] = '\0'; unsigned int hash_pos = 0; std::string::iterator str_it = m_password.begin(); while (str_it != m_password.end()) { buf[0] = *str_it; ++str_it; buf[1] = *str_it; ++str_it; m_password_hash[hash_pos++] = boost::numeric_cast(strtoul(buf, 0, 16)); } } #endif protected: /// username string const std::string m_username; /// password string (actual contents depends on implementation) std::string m_password; #ifdef PION_HAVE_SSL /// SHA1 hash of the password unsigned char m_password_hash[SHA_DIGEST_LENGTH]; #endif }; /// data type for a user pointer typedef boost::shared_ptr user_ptr; /// /// user_manager base class for user container/manager /// class user_manager : private boost::noncopyable { public: /// construct a new user_manager object user_manager(void) {} /// virtual destructor virtual ~user_manager() {} /// returns true if no users are defined inline bool empty(void) const { boost::mutex::scoped_lock lock(m_mutex); return m_users.empty(); } /** * used to add a new user with plaintext password * * @param username name or identifier of the user to add * @param password plaintext password of the user to add * * @return false if user with such a name already exists */ virtual bool add_user(const std::string &username, const std::string &password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i!=m_users.end()) return false; user_ptr user_ptr(new user(username, password)); m_users.insert(std::make_pair(username, user_ptr)); return true; } /** * update password for given user * * @param username name or identifier of the user to update * @param password plaintext password of the user to update * * @return false if user with such a name doesn't exist */ virtual bool update_user(const std::string &username, const std::string &password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; i->second->set_password(password); return true; } #ifdef PION_HAVE_SSL /** * used to add a new user with encrypted password * * @param username name or identifier of the user to add * @param password_hash encrypted password of the user to add * * @return false if user with such a name already exists */ virtual bool add_user_hash(const std::string &username, const std::string &password_hash) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i!=m_users.end()) return false; user_ptr user_ptr(new user(username)); user_ptr->set_password_hash(password_hash); m_users.insert(std::make_pair(username, user_ptr)); return true; } /** * update password for given user with encrypted password * * @param username name or identifier of the user to update * @param password_hash encrypted password of the user to update * * @return false if user with such a name doesn't exist */ virtual bool update_user_hash(const std::string &username, const std::string &password_hash) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; i->second->set_password_hash(password_hash); return true; } #endif /** * used to remove given user * * @return false if no user with such username */ virtual bool remove_user(const std::string &username) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::iterator i = m_users.find(username); if (i==m_users.end()) return false; m_users.erase(i); return true; } /** * Used to locate user object by username */ virtual user_ptr get_user(const std::string &username) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::const_iterator i = m_users.find(username); if (i==m_users.end()) return user_ptr(); else return i->second; } /** * Used to locate user object by username and password */ virtual user_ptr get_user(const std::string& username, const std::string& password) { boost::mutex::scoped_lock lock(m_mutex); user_map_t::const_iterator i = m_users.find(username); if (i==m_users.end() || !i->second->match_password(password)) return user_ptr(); else return i->second; } protected: /// data type for a map of usernames to user objects typedef std::map user_map_t; /// mutex used to protect access to the user list mutable boost::mutex m_mutex; /// user records container user_map_t m_users; }; /// data type for a user_manager pointer typedef boost::shared_ptr user_manager_ptr; } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/algorithm.hpp0000644000372000001440000004100412314121350021015 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_ALGORITHM_HEADER__ #define __PION_ALGORITHM_HEADER__ #include #include #include namespace pion { // begin namespace pion struct PION_API algorithm { /** base64 decoding * * @param input - base64 encoded string * @param output - decoded string ( may include non-text chars) * @return true if successful, false if input string contains non-base64 symbols */ static bool base64_decode(std::string const &input, std::string & output); /** base64 encoding * * @param input - arbitrary string ( may include non-text chars) * @param output - base64 encoded string * @return true if successful, */ static bool base64_encode(std::string const &input, std::string & output); /// escapes URL-encoded strings (a%20value+with%20spaces) static std::string url_decode(const std::string& str); /// encodes strings so that they are safe for URLs (with%20spaces) static std::string url_encode(const std::string& str); /// TODO: escapes XML/HTML-encoded strings (1 < 2) //static std::string xml_decode(const std::string& str); /// encodes strings so that they are safe for XML/HTML (2 > 1) static std::string xml_encode(const std::string& str); /// convert sequence of bytes in IEEE 754 format into a native floating point data type /// reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format static void float_from_bytes(long double& value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits); /// convert native floating point type into a sequence of bytes in IEEE 754 format /// reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format static void float_to_bytes(long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits); /// convert sequence of one byte to 8-bit unsigned integer static inline boost::uint8_t to_uint8(unsigned char byte) { return boost::uint8_t(byte); } /// convert sequence of one byte to 8-bit signed integer static inline boost::int8_t to_int8(unsigned char byte) { return boost::int8_t(byte); } /// convert sequence of one byte to 8-bit unsigned integer static inline boost::uint8_t to_uint8(char byte) { return boost::uint8_t(byte); } /// convert sequence of one byte to 8-bit signed integer static inline boost::int8_t to_int8(char byte) { return boost::int8_t(byte); } /// convert sequence of two bytes to 16-bit unsigned integer static inline boost::uint16_t to_uint16(unsigned char high, unsigned char low) { return (((boost::uint16_t)high) << 8) | ((boost::uint16_t)low); } /// convert sequence of two bytes to 16-bit signed integer static inline boost::int16_t to_int16(unsigned char high, unsigned char low) { return (((boost::int16_t)high) << 8) | ((boost::int16_t)low); } /// convert sequence of three bytes to 24-bit unsigned integer static inline boost::uint32_t to_uint24(unsigned char high, unsigned char mid, unsigned char low) { return (((boost::uint32_t)high) << 16) | (((boost::uint32_t)mid) << 8) | ((boost::uint32_t)low); } /// convert sequence of three bytes to 24-bit signed integer static inline boost::int32_t to_int24(unsigned char high, unsigned char mid, unsigned char low) { return (((boost::int32_t)high) << 16) | (((boost::int32_t)mid) << 8) | ((boost::int32_t)low); } /// convert sequence of four bytes to 32-bit unsigned integer static inline boost::uint32_t to_uint32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) { return (((boost::uint32_t)high) << 24) | (((boost::uint32_t)mid1) << 16) | (((boost::uint32_t)mid2) << 8) | ((boost::uint32_t)low); } /// convert sequence of four bytes to 32-bit signed integer static inline boost::int32_t to_int32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) { return (((boost::int32_t)high) << 24) | (((boost::int32_t)mid1) << 16) | (((boost::int32_t)mid2) << 8) | ((boost::int32_t)low); } /// convert sequence of eight bytes to 64-bit unsigned integer static inline boost::uint64_t to_uint64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) { return (((boost::uint64_t)high) << 56) | (((boost::uint64_t)mid1) << 48) | (((boost::uint64_t)mid2) << 40) | (((boost::uint64_t)mid3) << 32) | (((boost::uint64_t)mid4) << 24) | (((boost::uint64_t)mid5) << 16) | (((boost::uint64_t)mid6) << 8) | ((boost::uint64_t)low); } /// convert sequence of eight bytes to 64-bit signed integer static inline boost::int64_t to_int64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) { return (((boost::int64_t)high) << 56) | (((boost::int64_t)mid1) << 48) | (((boost::int64_t)mid2) << 40) | (((boost::int64_t)mid3) << 32) | (((boost::int64_t)mid4) << 24) | (((boost::int64_t)mid5) << 16) | (((boost::int64_t)mid6) << 8) | ((boost::int64_t)low); } /// convert sequence of two bytes to 16-bit unsigned integer template static inline boost::uint16_t to_uint16(T1 high, T2 low) { return to_uint16(static_cast(high), static_cast(low)); } /// convert sequence of two bytes to 16-bit signed integer template static inline boost::int16_t to_int16(T1 high, T2 low) { return to_int16(static_cast(high), static_cast(low)); } /// convert sequence of three bytes to 24-bit unsigned integer template static inline boost::uint32_t to_uint24(T1 high, T2 mid, T3 low) { return to_uint24(static_cast(high), static_cast(mid), static_cast(low)); } /// convert sequence of three bytes to 24-bit signed integer template static inline boost::int32_t to_int24(T1 high, T2 mid, T3 low) { return to_int24(static_cast(high), static_cast(mid), static_cast(low)); } /// convert sequence of four bytes to 32-bit unsigned integer template static inline boost::uint32_t to_uint32(T1 high, T2 mid1, T3 mid2, T4 low) { return to_uint32(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(low)); } /// convert sequence of four bytes to 32-bit signed integer template static inline boost::int32_t to_int32(T1 high, T2 mid1, T3 mid2, T4 low) { return to_int32(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(low)); } /// convert sequence of eight bytes to 64-bit unsigned integer template static inline boost::uint64_t to_uint64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) { return to_uint64(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(mid3), static_cast(mid4), static_cast(mid5), static_cast(mid6), static_cast(low)); } /// convert sequence of eight bytes to 64-bit signed integer template static inline boost::int64_t to_int64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) { return to_int64(static_cast(high), static_cast(mid1), static_cast(mid2), static_cast(mid3), static_cast(mid4), static_cast(mid5), static_cast(mid6), static_cast(low)); } /// convert byte pointer into an 8-bit unsigned integer template static inline boost::uint8_t to_uint8(const Byte *buf) { return to_uint8(buf[0]); } /// convert byte pointer into an 8-bit signed integer template static inline boost::int8_t to_int8(const Byte *buf) { return to_int8(buf[0]); } /// convert sequence of two bytes to 16-bit unsigned integer template static inline boost::uint16_t to_uint16(const Byte *buf) { return to_uint16(buf[0], buf[1]); } /// convert sequence of two bytes to 16-bit signed integer template static inline boost::int16_t to_int16(const Byte *buf) { return to_int16(buf[0], buf[1]); } /// convert sequence of three bytes to 24-bit unsigned integer template static inline boost::uint32_t to_uint24(const Byte *buf) { return to_uint24(buf[0], buf[1], buf[2]); } /// convert sequence of three bytes to 24-bit signed integer template static inline boost::int32_t to_int24(const Byte *buf) { return to_int24(buf[0], buf[1], buf[2]); } /// convert sequence of four bytes to 32-bit unsigned integer template static inline boost::uint32_t to_uint32(const Byte *buf) { return to_uint32(buf[0], buf[1], buf[2], buf[3]); } /// convert sequence of four bytes to 32-bit signed integer template static inline boost::int32_t to_int32(const Byte *buf) { return to_int32(buf[0], buf[1], buf[2], buf[3]); } /// convert sequence of eight bytes to 64-bit unsigned integer template static inline boost::uint64_t to_uint64(const Byte *buf) { return to_uint64(buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); } /// convert sequence of eight bytes to 64-bit signed integer template static inline boost::int64_t to_int64(const Byte *buf) { return to_int64(buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); } /// convert 8-bit unsigned integer into sequence of one byte template static inline void from_uint8(Byte *buf, const boost::uint8_t n) { buf[0] = n & 0xFF; } /// convert 8-bit signed integer into sequence of one byte template static inline void from_int8(Byte *buf, const boost::int8_t n) { buf[0] = n & 0xFF; } /// convert 16-bit unsigned integer into sequence of two bytes template static inline void from_uint16(Byte *buf, const boost::uint16_t n) { buf[0] = (n >> 8) & 0xFF; buf[1] = n & 0xFF; } /// convert 16-bit signed integer into sequence of two bytes template static inline void from_int16(Byte *buf, const boost::int16_t n) { buf[0] = (n >> 8) & 0xFF; buf[1] = n & 0xFF; } /// convert 24-bit unsigned integer into sequence of three bytes template static inline void from_uint24(Byte *buf, const boost::uint32_t n) { buf[0] = (n >> 16) & 0xFF; buf[1] = (n >> 8) & 0xFF; buf[2] = n & 0xFF; } /// convert 24-bit signed integer into sequence of three bytes template static inline void from_int24(Byte *buf, const boost::int32_t n) { buf[0] = (n >> 16) & 0xFF; buf[1] = (n >> 8) & 0xFF; buf[2] = n & 0xFF; } /// convert 32-bit unsigned integer into sequence of four bytes template static inline void from_uint32(Byte *buf, const boost::uint32_t n) { buf[0] = (n >> 24) & 0xFF; buf[1] = (n >> 16) & 0xFF; buf[2] = (n >> 8) & 0xFF; buf[3] = n & 0xFF; } /// convert 32-bit signed integer into sequence of four bytes template static inline void from_int32(Byte *buf, const boost::int32_t n) { buf[0] = (n >> 24) & 0xFF; buf[1] = (n >> 16) & 0xFF; buf[2] = (n >> 8) & 0xFF; buf[3] = n & 0xFF; } /// convert 64-bit unsigned integer into sequence of eight bytes template static inline void from_uint64(Byte *buf, const boost::uint64_t n) { buf[0] = (n >> 56) & 0xFF; buf[1] = (n >> 48) & 0xFF; buf[2] = (n >> 40) & 0xFF; buf[3] = (n >> 32) & 0xFF; buf[4] = (n >> 24) & 0xFF; buf[5] = (n >> 16) & 0xFF; buf[6] = (n >> 8) & 0xFF; buf[7] = n & 0xFF; } /// convert 64-bit signed integer into sequence of eight bytes template static inline void from_int64(Byte *buf, const boost::int64_t n) { buf[0] = (n >> 56) & 0xFF; buf[1] = (n >> 48) & 0xFF; buf[2] = (n >> 40) & 0xFF; buf[3] = (n >> 32) & 0xFF; buf[4] = (n >> 24) & 0xFF; buf[5] = (n >> 16) & 0xFF; buf[6] = (n >> 8) & 0xFF; buf[7] = n & 0xFF; } /// convert sequence of four bytes in 32-bit "single precision" binary32 format into a float /// http://en.wikipedia.org/wiki/Single_precision_floating-point_format template static inline float to_float(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 8U, 23U); return value; } /// convert sequence of eight bytes in 64-bit "double precision" binary64 format into a double /// http://en.wikipedia.org/wiki/Double_precision_floating-point_format template static inline double to_double(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 11U, 52U); return value; } /// convert sequence of sixteen bytes in 128-bit "quadruple precision" format into a long double /// http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format template static inline long double to_long_double(const Byte *ptr) { long double value; float_from_bytes(value, (unsigned char *)ptr, 15U, 112U); return value; } /// convert float into sequence of four bytes in "single precision" binary32 format /// http://en.wikipedia.org/wiki/Single_precision_floating-point_format template static inline void from_float(Byte *ptr, const float n) { float_to_bytes(n, (unsigned char*)ptr, 8U, 23U); } /// convert double into sequence of eight bytes in "double precision" binary64 format /// http://en.wikipedia.org/wiki/Double_precision_floating-point_format template static inline void from_double(Byte *ptr, const double n) { float_to_bytes(n, (unsigned char*)ptr, 11U, 52U); } /// convert long double into sequence of sixteen bytes in 128-bit "quadruple precision" format /// http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format template static inline void from_long_double(Byte *ptr, const long double n) { float_to_bytes(n, (unsigned char*)ptr, 15U, 112U); } }; } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/pion/Makefile.am0000644000372000001440000000062312314121350020354 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- pion_includedir = $(includedir)/pion pion_include_HEADERS = \ admin_rights.hpp algorithm.hpp config.hpp error.hpp hash_map.hpp logger.hpp \ plugin.hpp plugin_manager.hpp process.hpp scheduler.hpp user.hpp EXTRA_DIST = config.hpp.win config.hpp.xcode config.hpp.in SUBDIRS = http spdy test tcp pion-5.0.6+dfsg.orig/include/pion/scheduler.hpp0000644000372000001440000002724412314121350021017 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #ifndef __PION_SCHEDULER_HEADER__ #define __PION_SCHEDULER_HEADER__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion /// /// scheduler: combines Boost.ASIO with a managed thread pool for scheduling /// class PION_API scheduler : private boost::noncopyable { public: /// constructs a new scheduler scheduler(void) : m_logger(PION_GET_LOGGER("pion.scheduler")), m_num_threads(DEFAULT_NUM_THREADS), m_active_users(0), m_is_running(false) {} /// virtual destructor virtual ~scheduler() {} /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void) {} /// Stops the thread scheduler (this is called automatically when the program exits) virtual void shutdown(void); /// the calling thread will sleep until the scheduler has stopped void join(void); /// registers an active user with the thread scheduler. Shutdown of the /// scheduler is deferred until there are no more active users. This /// ensures that any work queued will not reference destructed objects void add_active_user(void); /// unregisters an active user with the thread scheduler void remove_active_user(void); /// returns true if the scheduler is running inline bool is_running(void) const { return m_is_running; } /// sets the number of threads to be used (these are shared by all servers) inline void set_num_threads(const boost::uint32_t n) { m_num_threads = n; } /// returns the number of threads currently in use inline boost::uint32_t get_num_threads(void) const { return m_num_threads; } /// sets the logger to be used inline void set_logger(logger log_ptr) { m_logger = log_ptr; } /// returns the logger currently in use inline logger get_logger(void) { return m_logger; } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) = 0; /** * schedules work to be performed by one of the pooled threads * * @param work_func work function to be executed */ virtual void post(boost::function0 work_func) { get_io_service().post(work_func); } /** * thread function used to keep the io_service running * * @param my_service IO service used to re-schedule keep_running() * @param my_timer deadline timer used to keep the IO service active while running */ void keep_running(boost::asio::io_service& my_service, boost::asio::deadline_timer& my_timer); /** * puts the current thread to sleep for a specific period of time * * @param sleep_sec number of entire seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second) */ inline static void sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { boost::system_time wakeup_time(get_wakeup_time(sleep_sec, sleep_nsec)); boost::thread::sleep(wakeup_time); } /** * puts the current thread to sleep for a specific period of time, or until * a wakeup condition is signaled * * @param wakeup_condition if signaled, the condition will wakeup the thread early * @param wakeup_lock scoped lock protecting the wakeup condition * @param sleep_sec number of entire seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second) */ template inline static void sleep(ConditionType& wakeup_condition, LockType& wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { boost::system_time wakeup_time(get_wakeup_time(sleep_sec, sleep_nsec)); wakeup_condition.timed_wait(wakeup_lock, wakeup_time); } /// processes work passed to the asio service & handles uncaught exceptions void process_service_work(boost::asio::io_service& service); protected: /** * calculates a wakeup time in boost::system_time format * * @param sleep_sec number of seconds to sleep for * @param sleep_nsec number of nanoseconds to sleep for * * @return boost::system_time time to wake up from sleep */ static boost::system_time get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec); /// stops all services used to schedule work virtual void stop_services(void) {} /// stops all threads used to perform work virtual void stop_threads(void) {} /// finishes all services used to schedule work virtual void finish_services(void) {} /// finishes all threads used to perform work virtual void finish_threads(void) {} /// default number of worker threads in the thread pool static const boost::uint32_t DEFAULT_NUM_THREADS; /// number of nanoseconds in one full second (10 ^ 9) static const boost::uint32_t NSEC_IN_SECOND; /// number of microseconds in one full second (10 ^ 6) static const boost::uint32_t MICROSEC_IN_SECOND; /// number of seconds a timer should wait for to keep the IO services running static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS; /// mutex to make class thread-safe boost::mutex m_mutex; /// primary logging interface used by this class logger m_logger; /// condition triggered when there are no more active users boost::condition m_no_more_active_users; /// condition triggered when the scheduler has stopped boost::condition m_scheduler_has_stopped; /// total number of worker threads in the pool boost::uint32_t m_num_threads; /// the scheduler will not shutdown until there are no more active users boost::uint32_t m_active_users; /// true if the thread scheduler is running bool m_is_running; }; /// /// multi_thread_scheduler: uses a pool of threads to perform work /// class PION_API multi_thread_scheduler : public scheduler { public: /// constructs a new single_service_scheduler multi_thread_scheduler(void) {} /// virtual destructor virtual ~multi_thread_scheduler() {} protected: /// stops all threads used to perform work virtual void stop_threads(void) { if (! m_thread_pool.empty()) { PION_LOG_DEBUG(m_logger, "Waiting for threads to shutdown"); // wait until all threads in the pool have stopped boost::thread current_thread; for (ThreadPool::iterator i = m_thread_pool.begin(); i != m_thread_pool.end(); ++i) { // make sure we do not call join() for the current thread, // since this may yield "undefined behavior" if (**i != current_thread) (*i)->join(); } } } /// finishes all threads used to perform work virtual void finish_threads(void) { m_thread_pool.clear(); } /// typedef for a pool of worker threads typedef std::vector > ThreadPool; /// pool of threads used to perform work ThreadPool m_thread_pool; }; /// /// single_service_scheduler: uses a single IO service to schedule work /// class PION_API single_service_scheduler : public multi_thread_scheduler { public: /// constructs a new single_service_scheduler single_service_scheduler(void) : m_service(), m_timer(m_service) {} /// virtual destructor virtual ~single_service_scheduler() { shutdown(); } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) { return m_service; } /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void); protected: /// stops all services used to schedule work virtual void stop_services(void) { m_service.stop(); } /// finishes all services used to schedule work virtual void finish_services(void) { m_service.reset(); } /// service used to manage async I/O events boost::asio::io_service m_service; /// timer used to periodically check for shutdown boost::asio::deadline_timer m_timer; }; /// /// one_to_one_scheduler: uses a single IO service for each thread /// class PION_API one_to_one_scheduler : public multi_thread_scheduler { public: /// constructs a new one_to_one_scheduler one_to_one_scheduler(void) : m_service_pool(), m_next_service(0) {} /// virtual destructor virtual ~one_to_one_scheduler() { shutdown(); } /// returns an async I/O service used to schedule work virtual boost::asio::io_service& get_io_service(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); while (m_service_pool.size() < m_num_threads) { boost::shared_ptr service_ptr(new service_pair_type()); m_service_pool.push_back(service_ptr); } if (++m_next_service >= m_num_threads) m_next_service = 0; BOOST_ASSERT(m_next_service < m_num_threads); return m_service_pool[m_next_service]->first; } /** * returns an async I/O service used to schedule work (provides direct * access to avoid locking when possible) * * @param n integer number representing the service object */ virtual boost::asio::io_service& get_io_service(boost::uint32_t n) { BOOST_ASSERT(n < m_num_threads); BOOST_ASSERT(n < m_service_pool.size()); return m_service_pool[n]->first; } /// Starts the thread scheduler (this is called automatically when necessary) virtual void startup(void); protected: /// stops all services used to schedule work virtual void stop_services(void) { for (service_pool_type::iterator i = m_service_pool.begin(); i != m_service_pool.end(); ++i) { (*i)->first.stop(); } } /// finishes all services used to schedule work virtual void finish_services(void) { m_service_pool.clear(); } /// typedef for a pair object where first is an IO service and second is a deadline timer struct service_pair_type { service_pair_type(void) : first(), second(first) {} boost::asio::io_service first; boost::asio::deadline_timer second; }; /// typedef for a pool of IO services typedef std::vector > service_pool_type; /// pool of IO services used to schedule work service_pool_type m_service_pool; /// the next service to use for scheduling work boost::uint32_t m_next_service; }; } // end namespace pion #endif pion-5.0.6+dfsg.orig/include/Makefile.am0000644000372000001440000000017112314121350017405 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- SUBDIRS = pion pion-5.0.6+dfsg.orig/doc/0000755000372000001440000000000012314121441014475 5ustar robertouserspion-5.0.6+dfsg.orig/doc/README.osx0000644000372000001440000001517612314121350016176 0ustar robertousersMac OS X Build Instructions =========================== The Easy Way: ------------- Atomic Labs has a tarball available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion, with support for both 32-bit and 64-bit Intel and PowerPC architectures. To get started quickly, just download and uncompress this into your /usr/local/ directory, and you should be able to skip down to one of the last two steps! Installing ICU on OSX: ---------------------- Boost requires the ICU library for i18n support. You can download the source code for ICU from: http://site.icu-project.org/ After downloading it, just run: # tar xvfz icu4c--src.tgz # cd icu/source # ./runConfigureICU MacOSX --enable-static # make all # make install As of version 4.2.1, it doesn't seem to be possible to build universal libraries of ICU (or at least we haven't figured it out yet), however you can build 64-bit binaries on OSX using an included patch file: # tar xvfz icu4c--src.tgz # cd icu # patch -p1 < /path/to/pion-source/common/build/icu-4.2.1-osx.patch # cd source # ./runConfigureICU MacOSX --enable-static # make all # make install Note that 64-bit builds of Boost on OSX seem to be extremely buggy, so this is not recommended. Installing Boost on OSX: ------------------------ Please see the README.boost file for general instructions. The bjam command to build all Boost libraries (1.43 and earlier) for OSX is: # bjam -sHAVE_ICU=1 --toolset=darwin release threading=multi stage The bjam command to build all Boost libraries (1.44 and later) for OSX is: # bjam -sICU_PATH=/usr/local --toolset=darwin release threading=multi stage Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. These libraries are normally pre-installed on OS X. If you do not have them already, you should be able to grab the latest source code tarballs from the "Third Party Libraries" page on our website, or from the following sites: http://www.zlib.net http://www.bzip.org http://www.openssl.org Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install For Universal binaries, use: # CXXFLAGS="-arch i386 -arch x86_64 -arch ppc -arch ppc64" ./configure \ --disable-dependency-tracking Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed on OS X. If you do not have it already, you should be able to grab the latest source code tarball from the "Third Party Libraries" page on our website, or from the following site: http://www.xmlsoft.org Installing lxml: ---------------- Pion's pupgrade.py script requires that you have the lxml library installed. This can be installed with one easy step: # sudo easy_install lxml If you get an error about an architecture not being installed, try using this command instead: # sudo env ARCHFLAGS="-arch x86_64" easy_install lxml Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have CMake installed on your system. You can download the source tarball for CMake from the "Third Party Libraries" page on our website, or from the following site: http://cmake.org You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make Note: to build universal libraries, edit the CMakeLists.txt file before running "./configure" and change this line: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -ansi") to this: SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -ansi -arch i386 -arch x86_64 -arch ppc -arch ppc64") To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure [--with-arch=ppc64,x86_64] [--with-cpu=nocona] # make all # make install To build and run Pion's unit tests, run "make check" Building with XCode: -------------------- There is an XCode project included in the root directory of each project called "pion-.xcodeproj". The XCode project assumes that you have the following optional libraries installed: openssl, zlib and log4cxx. It also is configured to build a Universal binary with support for the i386 and ppc architectures. You must have built all the dependency libraries with support for both architectures for this to work properly. A tarball containing all of these built for both the 32-bit and 64-bit Intel and PowerPC architectures is available on the "Third Party Libraries" on our website. Alternatively, you can just modify the XCode project config to build only for your native architecture. To run the Pion server from within XCode, you first need to configure the executable's command arguments by right-clicking on "pion" under the "Executables" group in the left menu, and selecting "Get Info." Under the "Arguments" tab, add the following argument: "-c ../../platform/server/platform.xml" Next, set "pion" as the "Active Target" and click on the "Build and Go" button. Building "pion" will also build all of the service, codec, database and reactor plug-ins. To run PionWebServer from within XCode, you first need to configure the executable's command arguments by right-clicking on PionWebServer under the "Executables" group in the left menu, and selecting "Get Info." Under the "Arguments" tab, add the following argument: "-c ../../net/utils/services.conf" Next, set PionWebServer as the "Active Target" and click on the "Build and Go" button. Building PionWebServer will also build all of the service plug-ins. pion-5.0.6+dfsg.orig/doc/README.linux0000644000372000001440000001377512314121350016527 0ustar robertousersLinux Build Instructions ======================== The Easy Way: ------------- Atomic Labs has a tarball available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion for certain versions of Redhat Linux. To get started quickly, just download and uncompress this file into your /usr/local/ directory, and you should be able to skip down to the last step! Installing ICU: --------------- Boost requires the ICU library for i18n support. This library is normally pre-installed on Linux. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install libicu libicu-devel # up2date libicu libicu-devel Installing Boost: ----------------- Please see the README.boost file for instructions. If you have an older version of Boost (pre-1.35) already installed, you will likely will need to first uninstall it so that gcc and libtool do not get confused: # rpm -e boost boost-devel If you're using RHEL/CentOS 4 (or earlier), please note that Boost 1.37.0 does not seem to work with gcc 3.x. You should use gcc4 instead: # yum install gcc4 gcc4-c++ Before running "make" to build the Boost libraries, edit the tools/build/v2/user-config.jam file and change this: using gcc ; to this: using gcc : : g++4 ; Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. These libraries are normally pre-installed on Linux. If you do not have them already, you should be able to use your favorite package manager (yum, up2date or aptget) to install the latest versions: # yum install openssl openssl-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs # up2date openssl openssl-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed on Linux. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install libxml2 libxml2-devel # up2date libxml2 libxml2-devel Installing Python: ------------------ Pion's PythonReactor requires Python version 2.4 or greater. You may skip this step if you do not want to build support for Python. Python 2.4 (or greater) is already pre-installed and should work out of the box on most Linux systems. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # yum install python python-devel # up2date python python-devel RHEL/CentOS 4 shipped with Python 2.3. For this platform, we recommend that you download, build and install Python 2.6 into your /usr/local directories. You can download the source code from: http://www.python.org # tar xvfj Python-2.6.X.tar.bz2 # cd Python-2.6.X # ./configure --with-threads # make all # make install When you run the "configure" script for Pion, add the "--with-python" option to use the new version installed in /usr/local/bin instead of the default one: # ./configure --with-python=/usr/local/bin/python Installing lxml: ---------------- Pion's pupgrade.py script requires that you have the lxml library installed. The easiest way to do this is using the easy_install utility: # yum install python-setuptools libxml2-devel libxslt-devel # easy_install lxml You can also obtain lxml RPMs from either the RPMforge or EPEL (Extra Packages for Enterprise Linux) repositories. We recommend that you use EPEL since it is more up-to-date. On EL5, you can use the following command to set up this repository: (32-bit) # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm (64-bit) # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm You can then use yum to install the library with the following command: # yum install python-lxml Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have Ruby and CMake installed on your system. If you do not have them already, you should be able to grab the latest versions using your favorite package manager: # yum install ruby cmake # up2date ruby cmake You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure # make all # make install To build and run Pion's unit tests, run "make check" Note: if you're using RHEL/CentOS 4 with Boost 1.37.0 & gcc4, use: # CC="gcc4" CXX="g++4" ./configure ... Known Problems -------------- The Pion executables may complain about loading shared libraries if the Boost and/or other libraries are not in your search path. Try this: export LD_LIBRARY_PATH=/usr/local/lib pion-5.0.6+dfsg.orig/doc/Doxyfile0000644000372000001440000014551512314121350016215 0ustar robertousers# Doxyfile 1.5.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file that # follow. The default is UTF-8 which is also the encoding used for all text before # the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into # libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of # possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = pion # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 5.0.6 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, # Italian, Japanese, Japanese-en (Japanese with English messages), Korean, # Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = include src services utils # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default # input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. # See http://www.gnu.org/software/libiconv for the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the output. # The symbol name can be a fully qualified name, a word, or if the wildcard * is used, # a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = doc/pion-net.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to # produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to # specify the directory where the mscgen tool resides. If left empty the tool is assumed to # be found in the default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen will always # show the root nodes and its direct children regardless of this setting. DOT_GRAPH_MAX_NODES = 50 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO pion-5.0.6+dfsg.orig/doc/README.boost0000644000372000001440000000703712314121350016510 0ustar robertousersPion requires Boost 1.35.0 (or later). Since this is still a fairly recent release, few of our supported platforms currently have pre-built versions available of these libraries. Therefore, you will likely need to download, compile and install Boost using the source code tarballs. Obtaining Boost: ---------------- First, download the latest tarball from SourceForge.net: # wget http://downloads.sourceforge.net/boost/boost_1_42_0.tar.bz2 Next, uncompress the tarball into a new directory: # bzip2 -dc boost_1_42_0.tar.bz2 | tar xvf - Building and Installing Boost: ------------------------------ bjam (http://www.boost.org/tools/build/v2/index.html) is a tool you can use to build Boost that allows you to configure many different options for your build. For a description of options available when building Boost with bjam, please see the Getting Started Guide at http://www.boost.org/more/getting_started/. You can build bjam by running the included "bootstrap.bat" on Windows or "bootstrap.sh" on Unix. You can also download bjam executables from: http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941 NOTE: We strongly recommend using the version of bjam distributed with the Boost source code you are using. In some cases, using an older bjam than the version of source that you have will cause the build to fail without any warning or explanation. You only need to build eight of the Boost libraries for Pion: thread, system, filesystem, regex, date_time, signals, iostreams and unit_test_framework. If you wish to only build these eight libraries (this will save you a lot of time), include the following options when running bjam: "--with-thread --with-system --with-filesystem --with-regex --with-date_time --with-signals --with-iostreams --with-test" We recommend that you build Boost with Unicode and ICU support. If the ICU library is included with your operating system, this is auto-enabled for you in versions 1.44 and later, and can be usually be accomplished for earlier versions by adding "-sHAVE_ICU=1" to your bjam options. If you do not have ICU, you can download the ICU source code from: http://site.icu-project.org/ You can use "-sICU_PATH=" to specify altnerative paths for ICU. More information on building Boost with Unicode support can be found at (for older versions): http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support (for newer versions): http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support For example (when using Microsoft Visual C++ with Boost 1.43 or earlier): # bjam --toolset=msvc -sHAVE_ICU=1 \ --with-thread --with-system --with-filesystem --with-regex \ --with-date_time --with-signals --with-iostreams --with-test \ release threading=multi stage For example (when using gcc with Boost 1.44 or later and 4 processes): # bjam --toolset=gcc -j4 release threading=multi stage For example (when using gcc on OSX with Boost 1.44 and later) for OSX is: # bjam -sICU_PATH=/usr/local --toolset=darwin release threading=multi stage This will build the libraries required by Pion and place the files within the stage/ subdirectory of your build directory. To install, you can now just copy the files in stage/lib into your library include path, and copy the boost/ directory into your header include path. Some platforms may require additional steps for building Boost. Please see the appropriate README.platform file for more information. pion-5.0.6+dfsg.orig/doc/pion-net.png0000644000372000001440000015521112314121350016740 0ustar robertousersPNG  IHDR$ 'aiCCPICC Profilexҿka{A[FqAB,E&M[bHRrwMwrImuvpt89Y"(GE9o2`x>J2)GC[ikRذc 8sSN ZJZfEz kł]m9/m:kEiן֘hRY֤WDZr-?[&M  %29S"]z@/|n^9׵̸ukqu&s_ pHYs   IDATxw\Sǟ= Kq`BqABնUj]l먣_uU-uVEPqJ$! d$Ǒۈ %pyܜܓ99!( `*`0 `0i0 ƞPfl_kAX+`0ej(bhAAQAJ SC@cX,ڠ0L.-D#MQ6]Zv}}M=c&KKDzpBf SJ1LM)lX,$I*-_>rz9Qu'Q-x0ҹa~yFj޼y@@@@@@.] tҥK.oEQ͛7Go A(2̊cǎ 2$ w= ݻLZtC3L:6y%?o4I4 .`_r%88888ɓEEDDۗNSΝ;W\ٰaL&())y>Ǐryy}Y'O>}]zΝ;_D;vtvvF&9P5bfɤ=݁=g&h4 -rV+ݳAĈXl0Հ7n(-[ϟ?|09rs;wL&SQQѮ]o;v,`ʔ)" rJjjjΝrH$1cl߾GRV\ <8rH$SN@@@j}ɕ+Wn_ˆ ~EL&ZX;vXreQQ:3k֬:uꄅu9##E~pa]";ܠn"_9ˡ&$If]`M4rJ||<=ʄZ+W|w;;wD;v죏> }>={:u꧟~ںu+Pu .899@^^رc࣏> ={ܻwڵs7ocǎׯ_H9s&ܹs'..eotyyycƌAz`'N|kjjjXX؊+G]fݻwBmlPƧEyPb07x pmgggHh5 b...ecH4`Ν;{yyi4(@rrr~Ё dzͧ̌KQQ2fbb5РA0aaa...7n\fMO`ƌfͺ>(jrN7f(jn)9Ps!pS dJhlyyyG޽ے=<:@*UTT4`B1e:MVV3BCCww޽Yf0ydBh$ yF5sI&]xGDZ4 =~ؠ3JO\r * ^ԩ(x@]PE0 Р*̈́?M4AĉCBBG˵MfX,ƍw߾}\.\R*feȐ!SL:t(6H$֯_9<}h;]\\8Jw^DwM֭|i\fʕ+KQQQll[xuVM&3V~M*ct/ ^p0gg&Nsl9QT[ӸQaA}ܘ+mk͕+T,zEjhdtu֙p\ѭ V$Ig%rfe󊏌F'T*PE^h4*ɓ'=yK/@{#JnYwwݵZp@Ĝ:<.8.A2;Ճ]HCꗫ?; +<wiU&ݾ|9Y" >,o`=ek%b HMM =_ r}}B^` O>@8ȝ :ˉ& XZa;d/Jߩb9-oV2`o K;)} /-J޸݌Yy}C߾{ƌu?x,6L M.ݵzF7=i:x<[H,O=UlسqNX6?ug"l2d8ZY>rdΜk-#rs1ʹ9 +:Ιj\|gU!݃ .0!fy~: xYIMYCBd֍9/ ,<:XDZ:.m6+2r"× 6dxȽuado,.I>N0lA㷽 CS:6H&v{a0EQ*eQ8pXyX)챼_K=cZ=* Atc C7}5\zxwnjwaΘ,OUd]@vl0L Df7ZYT\gl|zt-Z m5~҅#y[xSb]0䊖d&D5Auԩkbfy<DbX*D"rs%WE``05V)|>bfrE"` IMޠtl RT,5k 2b`jl6ReZ[Ph4IDbSƤj8{رcKw,|' < ϧ}  Jbq8@,K L&jXl{6Uɓ'Y,jU*on۶m\vchRT>g`0og9ݺCSJh=R,СC^\I)=썆`jHT , :_fo&Lx7n89a@ԅ cX,EQ=suV[1ɴʾ.qoN0*3OM= SZƍAAAeNoUf= Sé⚗bmܸϟ?mڴMEQw/l0 R8~xDDıcǺvʴ-S{e`0U \]]{ʴ!AFT6lr ST)e<# +ވY0*~rN^_ *(ǡ։ zbT'~ʠebhze|@ 0\GOj^9plI}ŦBb1L۷oq4{6ULLLy<ͶZXo0S1G1=e71E\Hc>tWt/\\X-%i>mA{pј[6gdħ-]M jɓ'LY6*-`uRdh(}Ns'2mL^R{6(޸NZ Ћil$^o4ircjJi0ŠR9REsf#: V>4 xYC =[҅5fM0mQb$i6i-`L.GymLflsdj0HƼ5Hf]6q8ڶmƴ!A4hi[7d ?إ芿w^-{c:,0]{1'3}'o`US e.4n?8o1 b`yK8uMN;S8q)BE?h}SJn3}ۿ+CC[0>a6+#(Z>ؼ%,$ !:Kv{/& WN~@p]z0cVó _9rC ɦo? NQ|dO 霚Ot왷-5_mlmNȐuk~O3!d䀵 Cݢ=C^mK٫~QB($^~ 9ŢHFgb3lbS!H@@C-F|6}0CkBZ#yHdpXFz)Zo'-=a2own= Y?}ņ~,be1k Z5ĺ9>m/l7rc0J$ ۮ];ڷo߳gO8w\C={4LzFT@zzz+ZLǎ{IܹsFS]tׯ˥;:LbcG 3C 4Sb=-+ 2rQ^Gh%syvx;R f4'H )}κsÎ 0n5`hr?l`jT"hq4W9D@zPnFEQ#zŦbptq{'Vmk, wd~>VOL; aשi>lQOv: ygކ~qlD~иEA3@f@`?YG]:њ/V/^-S@ch(Үht#{o\;buAI"ғ7LYRqZVѨjR|q߾}l0V\Z$Bd6*T]RJa 9[U&{:|g0֒7 `s'EGG3I,s8GpzN bV|l+Yro?IRH2p|( 2JHWTi%YL5ޭ Nރ L;F" b`jHo(+2b"{~ш28΍d‘vAPC^uĈ%Xl0LMUh>FPsET&̆Tb`jjz^fQdfћN18V\gaڜji=[pb+_fP$P !1uQG|WR7PXد[G5W?t<O%e2cݠ~vo ƞ R[Alch!E 5oUaB]OŴY}CꪒF&؜ 1}YUS/ge}:qOMsQ>>]\Zo]wprm0l+o/MK2ub$ǫ_ܓ'sAD9FʹEe 3 #2.@V08`>CݵoKAf1 l}yu]r ,la~Ƽۨ?~yGάI<҇+bo憶AĮ6bwnw^K$EMceOZ1D=$X^P&WRʇ ulc/j@4XlH$Bbc9w^z577LblRhH$Q PO` U~o4apO ` y:FCrƻ~*˖ɮls`ub#Pٱ鸘݉K'ӵD6+̿P> >H=<,ɧE.(JޯcQY:a\. BTJQ$IF^%''t: Jo:0#DRT, :VCh`3mMѳ|>> Jvxt~"Ih谛?89ջ~b'b?t_HLz[vι5n6's7&tI sB#,A8 ('`2L&lˊ)S8 :u4qD{$H9/B4&aɤ5Jz\.A)V2ӀfzU 8(XgKdlʻ}ǐzyWZ-^|+λ͗3ܜ%@ pf.$HxHDK2V\\w}^bwųev)\.#x`0H93Xڗi-Q;/> i IDAT]Se:YӔquhAeXhiNo۷?w\AAaBBB*l8Q2 p'l0;#z{1Տh\=x`޼y͛7OHH8{3F-^/s6cь7eT,pٳg,Y2jԨw}zݻw ̈́I] 〼7Z{1 ]9zCgEŋ5bQqX S.5fqqٳf5kdy{P)`i݇*Dnnn|||@@?aUkN/7i+jyϦ=ztٲeǏ`  |z0 Xlպz3g,]4 is0 MCʏisCI79sixcj3AbbD"a ` - ՗ߩݹnZȧapl9 cF! 3n=7nzy3GN#*OжtE~fzW:SbS"Tׯ'$$+.. 7 C‚t⢢BJUTTjKJJʄ5(;zE$ B066ť&3gtҥY:P((@m*Pǎ#AmJU%e c Ų|˗׫Wis0LYh# o2PCzv>}Ξ={޽2qC>ۗU7:ok׮" ٠ bEExqQ* 2,11Q(1Z8(;N,]Ç8pyIVV?~СB@ 0UfIؼ3gFGG0m y)+˅6>4[CM~~e8rQ^ӧW_}eG{P/^X,v zEHu}pINNްaôi˜ z^(h4͊+֭[b>޽{Zj?x<;ڳg4EQTJJʘ1c+EV۱7ڋ!Irɒ%ׯ_シ6 ԃAb{`2֭[`A%$$]&LrqWWW;qݻc c?A :``05 ))믿uV,XJ'.((PTM4 cǎ]nfgΜq ?~ĉgΜi֬٢E"##nݺZѣWZUWG8*pm72ɽyy?/J6. Se4(<<<77w͚5W\y*ٳ^^^ 6 ^r1p<)6#Iƺcva0*@RM4iӦKHHyȑ#2.gݯ_~͛7͛o޼yY&޼͆ksbGMՍ QZ "4n!޵ $ s7ZUh0p*qAD訣w `([(A|=b00L˗/oڴUn޼9k,X̴])6rIۼ&h.J&.Vѩ4yUvj @\- ͪS?DEk+3{2n͙k: RRf}q=qjް9Ґ} x<#NzjH6me˖Mn5Sl$$_QKZ,?I'#ZJ7QtSoۗS +& 732FF.Ih$凎Xh Ku2pWLD(Nk1Zn!Cԭ[iC)6FG" |NP@nm>wݥcށ!@Ҧų"|%Ϟr0z̮kS 1\jslIRhKX5Dဓ uCRWĞN)4[臛3\_ ӎv'uN.Cތ$u#<:;wm8u):6vҨ)L S?؍ "ww:.@o}I 0?kZ4In_&e@{pQlh(AWQ^mD)ڄ^Ԑ>E* 69`0 OsJҤEATL!CI%<0bɲiTiӔ2 >  &CCsvD? i[̶y'WGȗ!쌐ϾCQyELuvȷdklP1# ~}EQ{f@DL|Ĝh, >%OoG;%6Vŋ۶m+((` }(} fKEQϕM.JPIQ\(:xr|| UF,Qd+ghE&iӦmڴwL`"'i6©&AL3ӵ$|IYwҿڒa?=!r{=⢣D#l^#S'p+Fҵ,)/;$a)6]gʃkAm۷o5~/vvvf c4l«>DnGg;ϫlڔ^j:Ǧp'6MC3zv˃-j\}(\:{JNfVQtPZUGׯ_JJ ӆ`0W*S-ԓMCQg>$yHv6X*m5<^1;@4\L24ܷ,"Fs ""B̙ }]Mu8jx Nպf͚'O~ 4` S1TzT&}QH,p^@RUx,q&Z={6NHHH$L`^EQ.]:tZ~w"## N{H$b橱s67n5jTӦM.\;vu֭Z?{aÆU_ .4i… L̎ÇWZ5iҤ;2m y=SLٷoߖ-[q1oMMŲrԟ~L`^ǏgΜvZDp/kFR9sLTI1G/^x…aر nnnL,^#6:ޒWΚ5o߾`6~zKZaqZ7no? 6l^wo4EGלc/V+lݺڵk`1^j/Νk׮͛7^.z'ԫWbX,GI02z{ RRRN٦M-[oH1)#YfWdTFtAlՊG0Lfly bB-`$3VVohAij^UԞzyؠٚƒ7gl6(ܹT=eb-r,FNJv$i0JJJo\)_bXTqe[`1IFa`Q 8sj ݳ;$I)*7Zo1A%z`YtiAN4Z fX<zTM&1mUګEg F36_гAu1bSdl6:c0LAQj֒^1j2&ݳX,C ߇@Umy؀aT YEnga̭tdУZ/|NiG>ӶU*x0Φ zҋ`<凮^N&_:Dž^4*oV#눅@*(}ǭcu`a? O?sUo0k/[s/]z-?w_˽6:(G1Fmq,^=M?̶Fx^ɣuw,i?4><-+rV>Ҹ3%9ue ؽ\wy/(:?͖f'[ox$_[;7y4kYFt0(~(6ļ~b6?@,֨&Nsl=3gոa!̟c`=^eayJHwABct??nS9=8_]fkT]y*^ص=e)mְg|KWN7^T±\(Ꝇ! Bß_Zp^AD61LER ^ېhW|jgW#s 0vQ' 8w t2b?2\q2G|rеQ[[!MBRɇsٙ}Ŗ9fcN<(l@ [Zv`?FD Eb O/|h\(2I m=џ]mGž7x8lMnB둿_Ԝ;)lGZpk$ 8|ܟwd-\ҹk= ]@ޓ]n5%0Ų{̀ l P:0}^>A~!AA=6Ց={ˤ&I #OMFo8{ SkРEosNbs8|>ՙYyymWGՁ_ozq`_޲O -=]g}\==;S[YISodu81L'gH=ʰ&dwa+Z.C*rikl #?~sdB)YB6C{EX =kG~`0UCzzpܺwUl߸>\6ȟis .w@ ]0!A9iyщw\‘{Mv&.4/8#m@)"|[*{sh.n7h6컟wkrG*fDl*6O jٞp9Y[Zv {o@۟&k**nXnem$$77vG&Jl On=S'EQ(V-**R(ݺu'>>nݺ..."H 0t/CթS /Lob.VBwy ^mgw![{AԃqG@SyӫJLw W =[&۟>`?N:2L"BG jjZP<|pȐ!L<{bUyqW:I\Hd'6flun;zh777'''X~#<1(vߊ^1Ix-.....FB DbX,fpAxxxXX/=H%R!/.ŇP_RLnJO%ҥYDn <+$ӡ7U !e/<_S 겣GvGZ)Z<s\>}lߢP(D"$ ޳N믿Bw\nAAkxʹw\b*@,6WA71:@"үt2U6]˗f3b}6oAO?_&ڲfx<+l.px<:c JorDrW^ W`Mmbi4Rm:Nӡ H 1yF֭[9ܹsG,ׯ_~Uzl>Ysd ǀb6 ⢣qtYAЮAg9˄mUA>>>Tܿzװa=z4lP(E 0D5O='\=qi  ǩ IDAT___6MO@W_,;..:`___䐉Ʊz6$&&>y򤰰PVkZ^+TAfYѸVF樔W+ dnnn_ѣGiiiiii/_͚5k֬Y>}4iRTПyhB(,,h4:e*94"wwuҎeSz<>y򤨨hmZ\\,$rDή=2^г9bdZl6G{YWxڵk߿XfX<њ;r+:uӧz}Vڴi3vX77S@J\ƅBH$2@$khA  s#BQBX,F-c.[V^W* ѣGȍsNݣF}vppo!EiU@ lg FZ$L&l6ӣԕgPrr{>#:A ;KRTJ]>xS\]];u1LMLE%jE?Ʉ"TI%%%K,Ϫab\.]9E1`mbTnFD"1ͨ0Sq]zb:e;tԩReN=zx{'jxLCJSy=#GAgΜ߿e\Sݦ@  XpE~ Bm۶#Gt᫯ .Վ KEk@U v/]D͛7X5A.DAwn`ZAQQE-G冊c(۸q7n\w ͚5;~Z>q͛7ccc[lY QQi4K4-eXPJTmXJСCAPn6===+*@)t<aU*k׮=}￿i&ggg{LJm_b%gO@Sf`~C('B[1@+u vR*&NPZ?ՂtWFlP+%6(+VnC:u*66vܹsf^RSSKJJfZ~Q=T8t(:2,wa4(E f($3_x1EQ^]2hAgo$I޽mV&b|Ee2Aj H H7F8vwIQԮG:ׯ`0ݻ&tرj.< jn ѷ*:|a]tqqiٲ TyseڵKJJƎ;tЊIwQсeQ9u1:k7TU?dXHؾ}i*BD3vB߿?s̺uZǾ'u+KJJ[BQTd2͟7l߾=%IAgzi6͝~ֈݢrX'-@ I5)*?|={O>UsinfH^6a. j`L3g>ۣs6a„۷׷yB@bC4LWwiu)>>>Ŷ'O<nk=?67bcƌ"uGJc2ݻ7?髰!vr(N#yQ>hvgg2z;ﻸ|UvuxV{~x>~X 8;;lڴiٲe-4&5ȯ*c֭C )s2>>>11{ovر3fT73k_^OOO_uheUں1;D")ӗ8 U1eغukIIɧ~ʔ,W^VtZvʕ'Nlժ]ʹ˗/^lŤoQt,mڴݻ +++!!aRi^gϮZ./lL&hwf޽^00^MhZWWͶ;|w}wƍȑ#g̘xJD`G͛7od2tԩk׮ rN>wM6U)&Icyk%g 3s\Ŵ]Z]3!?ydɒ% bڜW1}/b111LbOz1rʘ1c*ZHl۫o" HD*գV{O4ix<޼y󒓓O8-Qz6F3gΜ[V [ЈbAí~bA1T4M~$e˖1mNyquu?Ifmi{6oެY=FGR5 gXW5۳X,[n3fLΝWXQ8uԯ://i[7ѣG9rdU^UETf]1: T'4M ۝>ҥKk׮߿5 9rɓU*Ӷ,6o={"##gJגoCX֒Gv }ɴf͚ɓ'8pѢEL[T!"#####NZMyX,\bE_B n.kYCֆ=uD<0k(]#@R$qL:塗g39T״gϸ;J]P۷O_ fh4-jܸ * TGtܳ)//^ {@},ɾz_dQҳ aNyFNC[:Ex/ gĄGOƄwLMMtŋϙ3gر r2a>pB XlKVV x#c+}y6k(i;yt?{c *W_g63FVʔ{-H9R%pҮsIҎ0q m_4~yےjm@bz0 ,MTݑ+9>sr<8x&FlQ(˿ݏ.6Ν矝7n܈gdzrwʄP(ljjV! F u ( %{XY ȓ'q"|; (/퀱(}xYEHꊺ7o:J=ŋ]vܹBt]LF&8N7 P -dr'1ތ`ت0b&&f?a l]s! h45gK@T&sp\SQlݒ܊7nܨAR?h/!""Yن,""H$[N~=˗/GFFݻHٶȊjf#+J?o4B!kP6d-BjZSу9{6$99ĉ˖-9sQ>|ImmڵkeyMB;ӊ@MM*6Z0e1<}(јנA%HJldB]]]$ Be3TWݼySV|x(Wlnݺdɒ6,3z8_5F;t萲 y?=Y100x򥱱 QaThðFkhho߾vڑ#GvAAASE5SSG)EFS]ihhtV ,YRY ;wٳʶ=T3Y133+..?~|wv]Fa?YUU)GKK+<<|ՆÆ S9oG5KKKlQ@ DGUoG)xb ?sٲeJi:A~ɓ'ʶenB;0!;tcd'ן8vVS2BQ@ Į ﹼ|Ν|>?22ԴzXꫯ6l?7`ժU^^^#F$@ xUUUOoVUUөb?{R朗S541 <5@X[][k4(Vsj) Fd`]]]:NR)J/t!ׯ_.=zaOOٳgBBBBvvvdddO NtѣGgggw>!D"B Uollljb1a P Q_u{I #GTWW.aiF:EQ:NצhdD Ti2Ǐ#""tzLLxP)xyy={l۶m[lQ-PM=z;_C#$JD"HaT*K$07mnn{a"3LRWWP(D"S۳DN6m"lܸ믿>|EmĦXZZVWW|N2Nh)HJ#bD"cI߼ys…ʶ@ ;4 Bhhhd 3M\n߾}l~~~DDR@ |w˗/4hPwĴJl: #GvqqkhaDhbX,777{6JٳzKKKe֡(J"D"J%4 !,='4Nj|qز7}}}e2mڴn|h_C .{e<33OD{;4(J7lDJidDh׮]۽{ѣ^mP0,k7o޷o_O | >,FsΒI>!Z֤q1 ;u{kwwWT#C\.w޽ ?V͛wݽ{(tAO??%(2=59+_]]ݥK\]]mHOب6ldD.3~:u{#H/dƍgϞ:ur-QMqvv]bEL C$iݻw/~+ѤTtDp8vz;z6^JnݺuժUJD%6`XXX\|;| =y7993g($]^]]^SRR͛`]ڵ(eU ӧO?s挲7nС0tqƍ3ڵkʶKEړ'OVZ?۷?W)MqȐ!W Mgpttܷo_YYT-JѣPZZz%Kb[}t"|D"_=tR777Ӭ^zҥ7n5jR PMg  Rv}P!7::yΝ;rCEh4ƍm: BĜzc E{H{TOt ŸyӦM . S)MOfذaNNN?RzWM ڭLTęwf5*/rD9/h y#^^^ &MTt//삂Z%6-w˼ 7?Q_ gtVPhs9\ߪ pG6 0Al;3A|AK|e8 ;wܱcPPPdQuTݻ@%6-࿸@/ uB7! BAۘ PH 195SfTm=L:zaX "utsten{v,*mU'_TkaGI|){{z:d܋spêݸK?+ifse///0z4LEי0a'_ش@\~XMIVDZbc^vV&*ӦTyR W)U[ Ͽf{HF-xZ|^lÁ@ m![ s ꟬m(z\?2񊁥|UĻѪ-[YJvm*_RRRCCrF%62Dyv:3ub-ѳt[uul6 m4 X)*M`;TxՕ0YWDuu-^U?kg}V]]aD"]]]9U{nmjsy6C kDT:"q=u 5]_}fM% ^~T.?&Mtܹ'ODDDPu)(r~gu3NuEwQב.dSt{w>~C9GO{>wzD'@BCCLNLLLKK[|y ThiiM0!--ãS|۷WbbӪK'x)bH$BPٶ.-46*i’8]]]eB̙3gݺu .손*zzzMN)| ۱; ݛko7H!vV3L%}Y챟0e 3'quuwbh;pSX,VHHQp `nn~E6T{6r?MLLҠt6#%ɓ'OBf ZF=+J/q|կo?"Jl$;;{#F1b_lTtgΜg ȓ_p˖-ri X,B۷/.{c^,)(H$ʳҒ}]ٳo޸qR444̟?رc>:g#OfϞ]X{b IDATXx] "x<\TWԥ||7HFFN||t* Tb#OH$_|O?ɥ5|Lg6<I.B/\"H,&%%}d#NөeҤIW\Qt/*3'O.]Kk"H xFLKX,D"D"'7ʶHɤ}4hP˷T3ކcA&V\k׮cvqc@&B!'T_l 뷲Q&Ν;%޽{f̦abb"^|٧O;;|8q⻔:SGСC=QB=x`#xc&Hpp8%r1 ~qW9)**=pg}֎jf >tuu_TlaXtŋ?3Ŧ<쬚ي ccq}j:]V5hrv\>4_VMek :LreTgd?R7Ib1gފ$Ovy]ճ܈++x%D5Gb( mmytc=§tٮ׈987?Kׄi pt`0`ЅA̦ ǛAY9Y'_P_dfhn~*hdNظ{[Zj2Gcc#BQzm):Jlȼy޽{vp^F7U#%1c(c~3}|Ӝb04~Ls}t6KKL'(J@|?,$hmJ~R@,۽IW yIQ_]@֕E!AI{!W\B$11A U~ϽEjMH˗۷O.6BϽs~;ݿBwXrPޙӡG_Lvkp2f=2Tܺrs۞[A~c{ZmmmTTԣGmll:zj w a5TbX&O|w=-["7IxifKqCknj,ivK2|FNG nd ywy> 8R""i:]gӣUޮ @:lhh֕M4 (+gϞݿ;Y5H$i+~oƍď_QU@eLa0JM;ZƘ)}?/wհR" nq,{fý蚷 &ȓI:DuEÛ7gL!{ϟ?ߵkݹsEQlz'Du*Q8,ĉt# Q=_hkdiQY -H.]\kd/A؄"3Є&θ١̆VÀ궃ZVV'ցjp+ gΘ){8q"11q…DgðMeǥ~k <{lʕzf<>/h:T*04:/ JO%(ɭ'xӦM}РRUiiiDDDZn\)őH$OOϮ7$$$$>>^q]8o4===IiO?=x`[P7Bo!  JPh4m+ X|AHyS-N^xahh.,62NX4"QK,xTc(oPSSs#M==m߿|򢢢3 ;|oh.d)9PQJrALSSs…]9rU:dɒ[} @5|bÿ bQx[oU_x7AlrjjB=U_d e2Ozs)--˓{+n޼l+[7]Ұ~x < Y#w&/^022Rh ǎɪМhM ?fO[RSe'M XKmQ%-UNA?ӿq^yUs7<[2GxTϴ߈@;zJuGV__?޹sgݺu#FP\Gr$߰ar„  883~xP* [\\ ʕ+---QSSCDqݻw/^q.67 /3= X>S2 m[GeoƎ0̙]r{+e."nw`gҤI;vlGe2MŇÅ lvBB"cN"/i~ Lt,&_A~&Yչ]~A& 0UՃH6S$Лz.ۯ_?%LΥ5h5n>Ͽ d@ߨ@c4t #f\s|&hUd]Kbg'dxY)#ȗ˗Č3F/ DFpTȅ={<{l֭֊ĮoOBX,6bo54JZXh/QX 0D"@PI gc(qrB kMY|SzJ̹xXc-3 +ԪP4J(lʘ89 F溡,MwO n٦_888KҹH$xHy+,% ._ctҀNtJ3̊Ⲳsi]oR]Qw1FSS͛nn:YéAuto{`(mSOySɧ迣rO`֭III?Bb>rkjjܹom' lH u+hj7uX(-oU ^"57.06Rg3 ZZZ͡Nݻww1/477D">/n޼p,vF^EInť #I]]FdEQ3… lz\B++;fF``ȑ#g͚ND"pr'??(  |BPT jkkk;]B&_xQTTdaaAR%ikkSTLQx4MSSo߾VVVt:FQT䧅Dz;k O{ ??:gb7gFvvc"""؎D" <͛ɩ^EInŅĿd2H$Wlx<ެYRSS:999l6;33SA=__߯zƌVSS#D"L&3LMMM.H"TjNe/yÇ|,U])HNNH$FFFFFFw[F@ (jdd?:xxZBֽKlPQJr2F^':[;D"DU{ ͍d2D"?v<uСC4Ŧd2zٳgS@ (KD"AH$RT,x"?????/!...]iV3nܸ/VTTTTT\xʊLRAH$Bht:_7P(D"QA[-9wq!Y^10-gd&\`'lb\ê R̦+"OZaiI|qa2_x.f{,LOTD/uuusQDmPܴiۻvn@"d2FŸҨ XܕGn:y/ڔϘ1ܼsmvٳg߹s ŏ?FQbyxxkWh\4uu~ֈbUƖm E ;kt.U@Hs+s+E j̭\<5NXY7/NP(DH_FA5>5TNVTb4,,,,,,g|aC"' 5:αеeAހwa"hCLN˜)qb2a@" ĉ QYT3ã$-TA+" ]%r P{jt:K,UG4ݺ i@!T?+vc]Us/d=N=nNõJ?}EcD DVYw)I".SM+eWj Qd= &^`Obm,:| 5+b3YQiuά!)/#Վ]qZQسgϔ)S޺k-ݶ ~y<իϟohhaXxxv?xɓ׮]{ { <(OkIO1n!;ϿFDաX&\_HG,mkql}g:N%eVg^$( $5]+.XkbC0! m$^iiO2B: 8kЦxn9 ~!zqU~"'7r~k'kE k3CJlCWksI]sWquuMMM}ɍt-D",߿"2>)Ϸ>-"rv WaXVV_5a„(,PzK"Tah,WIF9$d+/'Ze\ٟ̄4Y&@"(.H:AAw0 JЭ R qꗧ_w΋:% ViN%W?5d'L3\ќu2C/ DLԦǥL8ÇSy}YG\?Ǣ=n/t8'N ۔'Ot.;(csz˖-_~i6:G lu-Lv+a{dԧL əyu1m#S9ê1{4]s w?z I/Uoyn""'uj[|No0Xy4qP;| iO(j- 5J_y~(E(^!EGMĦG`01m4ٮt? 'XvG^Ҵkz"}Zࢁm-ꔓ[iw|lW;Y՚ǝ7|ap/zGBw 3!u&@:G:POR:;,o:}R8+I1(Ck*rHߏ@ _999)\єj#gXX'|ҝz gNKK64'֬vw_^0v򏂤$_(h:3SB؏f¦6tX-qnAE4CXcC;piZHzf;d=ȿ9P_WGxU`aX p^u//Hi@a3h*:+o4ySRRr֭1c;Jlz #F(//3Rۡ+HJJʡM+D\y x%͍˩ǫohu}  d1 {bBٽ :}Tx= 1Haa܋~+0"Ԫe V;~Si89 ň|.92d=%@CCΝ;#""jI @a3y}tM&;*/AOAO>ҥKE`ՙƆTͨg[oH\&~ 0[2e_퓭ϴnmL~瞚Ke[({A>_rR0/L4KRPuPIgu!ߓ[\;LS ߕO\x1::z\$6UUUW-TW#yЬtRrr۔ >,coo9 0 b0_RPu|ۜi.[W/mrqpH_܁ IDATNB9 <{ku譲ڠ:JX]]YVV& ЇmUƁJl: 6AkۤIt%D;P- FciCySϞ={OKUG JomJEO&pu7se˖ 0 ..VP9Oqf>}ttt455i4ڪ#bx…aaaȜxzebX,D۷o9Wh;<-b'`Fϵ# E"QҶ-l3?

}ӧ ]IEmmS,--NN @ t:]KKK__PWWWKKKCCC]]H$vBlϋ/fuhX, <iBuE3WK$ @hnnƅ\ =%GU9乓\w]4tHV0-gd&\`'lb\ê R̦+"OZaiIRI$Lh"D"dzv`VQQǏ|/$...vp߿AAAAAG)MP( ECCCSSJein07n׉ 4@ P9*ƛ.;;͐.KgĦԾ˹paʔ)%y2#zv_VӭVe#@̭̭2RTsi-:̫E@;'j Cs5r6<[2GxTϴz; s:F H$oHԹ3gdeexm;;;[ZZv =***211?~ Ft:NP M6l.\occ# ;Mi6e\lեeR?C$Dt3L(|#2U D"GQEQ|.QFhx0%}Q~&{C QD2HWS=ءo@^g:@{de."nwlOB&oB| s3GG6}ܹ`0 q,//_O>=eʔSv(J&qРR$ _nCFb\]bW_:&j*bd2e4|DRv[,)E4<[ȸ_L@-.[#3yvwlglyp4{3A|SbRYRd ^qx(B4O!LZbll|ׯCtdҥ֭kYrV] ( FP(T*".\h#GU7( o{~WʿX%6F"taf"81*i&\_Huuz>4sjWQ\sEuJ>%^`REKCR; y?Cyyy߾})b Kuuuy oȞX]˗Qa]w >&JUtꊺWgN1fAZj|<}̙3.ߖuSTuV/QlY+BI'>X, MHH0`aæNo>_7o^xxxIIː!CvI ~'y Qkvbr1FyXXXp}>i8t*W5 4hk+qʕM@7n 9?:u dsɚkݞ'!eQVnDc"3"1CI3uL0|@y9);n4u*jzѤ駹}h$׿u(9G9@uʨ>~o>bP}=8B\*< v{Y<;vQc;VΘ1xwrakkÇ˫A|d]Ί[8O>v횯Ν;Mq]paĈ2lذ!55ȑ#$NK$%y4>T`:4W^0lر]G.F~יLǢV)%ܚZ ?ojtJ7lsI+⧳@9KI& +{}^wp#=O.wPN}w8TUmiT_j"(3Be=/e)o80 o;DcO7ϒi,(n,WNDumX8\x}0{OJլO~iܞ˪_B^ET$z+1MCW|n˿v哋%k[%cSq㧆:!6zv۷o+u!Ӌ/DG;wn˷y ^^^K,oR֭H$Hz]St%KtyѫS ZO{[Ih6F|! mL>V M_30X}Mltl&g[ &CFckB rdX9-c=Q)B rrA; x;)gjաueɁI۞Q6 &H$1$$ݻ͓nN\vm\\}||Ba}r_ qf#[xpg~võHybaH"L`3cYcMsցzcZ`dΎjݲظCG'Qb;>AG+t݇nmӺwVfyZf7%@^Z:]E`˃?f<57c?o0Эn=uی* $]~yd5NW/Qͭ3e1>kT<}7@;9ȳށ@,x=jG Vo"z\|ܲF+OW.O1mg(c#z`2EzYtҥKm+{n N.[pq+ ,l*t ]&@;.ѥ`#&٫N{F₤sQd pSߥڮ>g?͆ ֌ajv⢋a'L ]SXQnXE b[Ijf$㜖%r ~wMl]/>W\vT2tbA9Me3Qonz"K,_ǭ7HcMu7P^2d<ۻK`ҡL }BwBޝ}C|v!$WHdN~Dۑ+9>s&Y@ @ĥ!v@q[{<_ Uf 5i @g\CuL! PueX#\Pyt.=3ԗM2@Ǣ 1nQ)SL'kN'//i ew@ įD] &Ċѥΰ2`2L[7PCKƔkR<^G{p'iEBC [&N~ea%\L@O˞;m^+Z5KK.\z h1aCMt ]1i!TIz\q!O@nSO5ޠ.d@@PU ӆb1tKM s'ӚZ}k!' K&O^gK_T~UJ8m 19@z03g2,c  06ؘ2wJ3*mRU!)g:tcxP޽$6D< AK*;_j/Z8~yO[zlK~=d6$*# ,Z|QM[h-_~H!ժQmDz(wiqM0dh<~A$ @OiSmR0SP_ @&~4ʂf{CyTwqxH\0=я9fw T67v 4Q֕)@[Հ[x7^'n+Kk]@&_?[HhArvqQ,Y'/pvm}Ds|ޠQ+~g<i[fVQ6Kf)hc:e&nb\өwqM\k&3dA، W$b"RmU*X kkڪV{{+ۊVvm^ۢe)(("B {q`O̜] Ȯ4!ۡ&yD]p kݰ{o%ARoKH8ld튋|s@oy4AcuYW孎QbOmO.[^'|gO6twq^Wo^+Kx;|tU;+wwZ0AeYmRZ&.ό2J>c\ږQNC#?mzϐW~WAdWEAi;V_+m|V\;y'?}ik6DM4I1A%]}H(f#>ةyں띶QxRfU#iūƏ d4Z"::C6h:IxqfbFƭ 3`S%b( x7$c~1MjƤ94/ m-CFשuc@/4PX?3?ܔ.O"G5lcT/z'ܦDP|1Wl=Ο?… 'OMM bȵBگ(7O=Msb4QqL駟0 ;;{ʕ#Gl+6O?ʕ+=޽{{Nņ"z}IAs;F L67q6^sqqڴivLjuKMII?tҩS9sgvZUO>iii&),,,7nr~( $ITQswn4.<yБlDT mjK?mHG50AQ[|.9g6SLQ՛7onUIBpp#GF9bĈÇϙf6bX(c"*n4ay<0"MeҘL&cX.^Ç{{{䎇$IMex<eQCH$v9rd*jƍoG2tß{Ǯ|С(f%6PE40(:Fz=5*lavLilдd"t:^o2,do&>|X-22ҡ-Rh@պr˗oz^jZ A+aʹd~^xÇ? ŕ+W,ܾjxsVn_hVL `6ќMK\񬝑mfX07o׶o%oGl-3` 9(42)64,VfZAZhXDzUu,jFdpmo޼٥K{|A}_tC4w~7!&TtWdDF?Zh02226fbRgwM g#\X C;tl.Rv4b( gv}A, dz;v^x&;:YfW6IŴ@׋\t:4<*wYg: 3v'6Pk eal\#moTGVmT`X68N<,(99yΝ=9j+G߶V-+t:,6Bznt*dbhr-xJɍf}$I|{ݑ)))ٿw}f3 8ތC;&X,UUU(ih daf$#pnW(ih\3' ƂoqsdX1X,hWh 3CsG`KLVVel b0>h8Z!i2L=IBdS>z /F-؂Ng/D6y`"L+ENjD"OeeeYgsݝ6 Ac4D! &7ϲgrnW(ApH`04a a\j ;tZjGMpv=Q#6lBi5ʫ 4hȐ!K|^ ufp0?o]juc]b4eUz+@53s/+5@w:o`# C^}$.?l97mVr`xv)uV=+Jr2恂nkn:y3ߐ4o9B!g^UL{nBJV@(v ew]b/.=UTm0~R% :dz [݋9ē}ǎ'"Plp5'iR JrNn[3L⯿_+Xր)s'>}յ.)8F_~e]v4=YvocXб ~\V{?t@ݏ|NV: )ݱėw@u>wwūiʇ;/N}CU]-R̍*e%IC}wWF/~n`FvL4)>؅ҝ^s?&4:~X+ehM+ODŽ뗡?^JWeq޶hG%(_SFkk?e֍?Xmh-pGa!DNɓ_|w}쎴 FFiPCbP>zri5E?C:::@!A=C|!nOskgAXo`KLxn#!ϲHX|ϲNB}bN8:; (ع#0t,=S;M' av/I5]wyS~9}3-}*h{'ɬЦhÆMe C9bzVmk[ؽl,9//nel2www@ H$ EQC QSC+Xd%3Σf#@-l, ⒐w*Vs٩GC[ Y{Oh Ax+1Q_HxvB:._Ro%m[_'+Hڶ[Pp(E ٬]ɢ/**xI^$ȫ\ynǻ BEsgm_p݆,yqDX9qr0ZS%=W/Zs\VVvZ!>M7#]蝡2A-& |'>X$]j@~NirGm #6ߞ~p(C#{̺0nj2SK=x.]UݽF5hdy,r\zf }ġ.YEc_5W,'ִ8"qw!=TiBd>| 6n=ab4Alf:GNqѿ瓍`4(&zH Z^nCnCHH-,,DRչs爈?OFbT\Z:\Ybfy2oZm1c@dXE~́Kۦo: NKEo3}N" 㺒 1vv#2L9~}io_ԨCU~qo[3~lQ=NkΣg[&_2z`Z 'z?ӑ,@<"d]& >8p[ !A~P@S#Je!ߡYha8}uYFO `ěA= VZѵ };[BCn @6zE#p݁;NY1'_C9)/0HQp-o^$]ݦL@ X&& @ ?Ĵ.e󯰱+ԌzSiSrS 8պnݺ3gzyyt BIIIzzzzz:QJޥK,ۚj“d:_oOi7@Ж[\nrT&dpܸ]~ෙs/d)L{[ U#wS'q7q|@Wl'<{MR\L|#}VX6#)c= 8.0{GI(yՐԈ_~Gwqhڀ!xȯ_S5E2-)f'\IJ+sp2MZuvI%]*m QUlИΑ~9K$H;7n_|ny7 P[lpN.h3(+dXFm(6l.ZӖ=(i.Xy0-btAj ׯJׯ_?p~Ruk $Ԏ2\@#ͻGHH-4 Lbc0gKv*>xS>=3}ݒ-4۝'%Q9{%_h'X'Y#H.Idi|gU_zOFv@.-*GNj|?8PUCxSPVu3cɄMy|I]wo@C r3-CSy-g$c׹s xxCV=7!zFSǍ?M slLw߆]O2 \,,W?띓wEUZש^nݺ(NjUUUAAA?xӑ͹Sxbܹs.\0 @n[$B\|yǎq{͛7兆 ,2ehJBm"~ZEj-JDbNmYa/,fj_^41B^c1k*x2d#m.fsR%Ls<3:c֘:xxxD">rFVe-\L^ xVHkɬ̝ 0q0ch͌WX2U`ުm_z权_]:tpwwJls`g6lS뫪O(*UUB71Z ZܹsOdZ~xQnܸAӴNCGDM8"Ϛ!!L]()fl럶 DH5B3Z>bj# @nLGRi&Jb:ҷ7ĮѬ>fGi*++ ''gڵ' :444~A=,eeeOd:7ŗyo jv_?ֺ,{1t;hPzl*>F+F#*N $=zgΜyީS{>HZ RsAho4~F'eC 'F@HiLڵkgΜZ믿YfxJyB~fҎ:#5A։~xu1rpS.os|R7'e.oul ko@W|,^N6Up k=UU6n8a„O>9$ɪUƏ9^<͠hpIN,e 1J3K`.,5j2,=UkM߱UEkûn* 7uμM]]&`իgΜqƢEK.֭k$ќN hM$nn4|- A||%ؽ,# 0=:p v8qU7,s jsJSUU-]|̘?| ) ${=[.h6 k[oS}P6OC_vc[cy,iL sך$>O(S8O8Swj |> 3&h wFٷoӧ0LLLmj%NwW.Ur6;`(-ɉmJT9sEo A`.uyP/.%{+o )^>O,g ,{K#$F뿢L1~]X__[1G̏Ң|I\0g?/"*Joem$7|YJV4Νܹs@@ Jelll>}PZ)[ T*02v{'jv'4{ڷ#}F#(%U(r^QQBR:ؽNeMX_!O>$IAɚ h{MeeJw^IIɄ A@kn1= 0q0`:$zSfO;3'L'DhJH ZU4ed{]3߽~Co̘MCi)+K_zIW{J^R]e<7c<_7oH$\.Ǯ<":(:LE)jTh)w5J쟭 Zxk׮dN66LhDZJ,..(Ji4"3 ժT*Pp*++y<$I>d*|5BzN]s7n<+rsm6v/؟;I=J_{R*zN,,[\e\~2_ Rǔ[l͛bgԙL\nXx \&1N᠇Dx<^@@D"PE|`hpv{d24,D"dTԒ}x]vŬ~d20"H, \.k^y>n4$6W_HFX BH$ if>d4- ~rF,; =n1^?v~=:5&HQձ3iwIPHߠ9yn5R60R$Qnu ØL&ViD"މh"H$Ԑ܍Z"-G$I) *wD4 F( Pқ6XiKl; #֍ 9Y}gU *t 32{P%?h:8~X,<̓\UH0iVZ=- {gXcIY!KPz &qߦw|[qz~DC!=dXl0 mӺۆ 90Mz[iX! |6'ZEDRVL #4{,嶴k-&Ӕ-[ Dim6mv?Bs:ݙ 5/f}Ou앻[GzqTZb EAi;V_+=ZQ !J%łAK-cqI5zG5tu40Vi{jwe=g4M#MhZ=1%|x'/KyMdXvqv~&FT?~<<%!! 0Ro;=>nn=}?NINc+lK=#hd7RŦCaӰCzfZ0:YpZQ ci)ob2M0X 86! {pȂ#+n?p݈pHKKqQ[gro 0l=iLMk ]l Gz̷oߞע,*Vb+4+c旧,罥(|ζY̸VKEWaY or?gAsr:Gp5 0l, es 8@l***Ο?oX_϶܅؜ lm%|>Fkx]ƇoS: ϺP{b? \J:x tߘn\:gajez`#wa`?!O ߾-.%bwT_.sac'7^Tq;3V7=\?gV\+6ݚsc0GQOlz!c|X,A:Ɠ@itQ5.n*>d@w10;P}v['L3C1fL1:h*ےUãg6d^\5^ҹϩ+F_],(vzn}~G!U;~pg꠶<9:YA<ӀCg݋ 9rl6b lq6* T~Ħ{#zSAل싐u+fzЪlPV|zuςU7?;A[s!$ϛf{_rbodޟ2`hz;~AgZHoz:sLӜ\l6ooVK_vU67h/_}?5ϗH\xi%:Rg,17O>!:sHLXX YH8"}]7tA+\Oz{DjA ?7$I:8Ν;Ql۶->>egliڬt|o})x- N;KA$Oj|?8U #.H+qt77O'.CN8Anm/! ʈ(O=WB ճnߖ16b5hH%⯿*..fFۋ/잶8Dm!>/b1[>JQZ|eomrX+6u^>ڨm+f?4"!0cF߰yug~j]qݖu[ޞX}ƷGfE$6YYYO:GK?8xJz꫎; j\ARRRL&lfk 9-AlT.UI`(-.6RU݈pHKKtR{Jk4i:WsChfп+J@J ) rv0 i>?otWw>}ɴM4I]Q]۵6W&1VMekh4,@~31Xi0K~aaaAl(nM61e/D5 RXhؠ2Mli0~Tl ݜ컺]qqqroP(-&S7y;24A/4y Bu!芏 bצX!|^]`! 8ʼn<`i SEA*xÆq{3K4}aovV[W?|^jnU ŚQԙ-Hҁûn*Z˟M!h37Nfj1 1`imԡ}?}F_/6{(1@+_'ӧ;jK;@eA,[ /WȂL~',\N\Ս!$\BB 04}?znHb̆oJJSD@5K%{iW)99y뢹"NQZqz{Μ噜0 Q`iZN2GrѹoA͕jٜ܈n@_^EDDLXx-eJA<+HVD3:|ٜn.D`O }>rHxxxZZڈ#ݗ&0iTjd(L>!Fq:BKyJkfB|O yvM.%JiO|b' ~xx9a73:&AK:l6.)t zw$(-҆dNCZ3\IuE:?9KE$@{{`0ml:>7ĝi3P H&"p1~7C OwĻ-I+Kб~{>F9'ݍ7uTߪ%Q9{% `0EfNWYYRݻWRR2aֳ1(n.RCjӫ4&XоqL #ɐM6j/y<<.tar.bz2 # cd log4cxx- # ./configure # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The easiest way to install libxml2 on FreeBSD is to use the included ports package: # pkg_add -r libxml2 Installing OSSP uuid: --------------------- The Pion Platform requires the OSSP uuid library to generate universally unique identifiers for most platforms, including FreeBSD. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. You can download the source code tarball for the uuid library from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz uuid-.tar.gz # cd uuid- # ./configure # make all # make install Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. To build YAJL, you must first have CMake installed on your system. You can download the source tarball for CMake from the "Third Party Libraries" page on our website, or from the following site: http://cmake.org You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure [--with-openssl] [--with-log4cxx=/usr/local] [--with-yajl] [--disable-tests] # make all # make install To build and run Pion's unit tests, run "make check" Known Problems -------------- The Boost.Test library v1.35.0 does not seem to build properly for FreeBSD. We recommend that you just disable unit tests using the "--disable-tests" configure script option. pion-5.0.6+dfsg.orig/doc/html/0000755000372000001440000000000012314121441015441 5ustar robertouserspion-5.0.6+dfsg.orig/doc/html/http_2server_8hpp_source.html0000644000372000001440000004762012314121440023305 0ustar robertousers pion: include/pion/http/server.hpp Source File


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request__writer.html0000644000372000001440000005256412314121441025502 0ustar robertousers pion: pion::http::request_writer Class Reference

pion::http::request_writer Class Reference

#include <request_writer.hpp>

Inherits pion::http::writer.

List of all members.

Public Member Functions

virtual ~request_writer ()
 default destructor
http::requestget_request (void)
 returns a non-const reference to the request that will be sent

Static Public Member Functions

static boost::shared_ptr
< request_writer
create (tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t())
static boost::shared_ptr
< request_writer
create (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t())

Protected Member Functions

 request_writer (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
 request_writer (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler)
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)
virtual write_handler_t bind_to_write_handler (void)
 returns a function bound to http::writer::handle_write()
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Detailed Description

request_writer: used to asynchronously send HTTP requests

Definition at line 30 of file request_writer.hpp.


Constructor & Destructor Documentation

pion::http::request_writer::request_writer ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the request
handler function called after the request has been sent

Definition at line 83 of file request_writer.hpp.

References pion::http::writer::set_logger().

Referenced by create().

pion::http::request_writer::request_writer ( tcp::connection_ptr &  tcp_conn,
http::request_ptr &  http_request_ptr,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the request
http_request_ptr pointer to the request that will be sent
handler function called after the request has been sent

Definition at line 96 of file request_writer.hpp.

References pion::http::writer::set_logger(), and pion::http::writer::write_no_copy().


Member Function Documentation

static boost::shared_ptr<request_writer> pion::http::request_writer::create ( tcp::connection_ptr &  tcp_conn,
http::request_ptr &  http_request_ptr,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new request_writer objects

Parameters:
tcp_conn TCP connection used to send the request
http_request_ptr pointer to the request that will be sent
handler function called after the request has been sent
Returns:
boost::shared_ptr<request_writer> shared pointer to the new writer object that was created

Definition at line 64 of file request_writer.hpp.

References request_writer().

static boost::shared_ptr<request_writer> pion::http::request_writer::create ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new request_writer objects

Parameters:
tcp_conn TCP connection used to send the request
handler function called after the request has been sent
Returns:
boost::shared_ptr<request_writer> shared pointer to the new writer object that was created

Definition at line 48 of file request_writer.hpp.

References request_writer().

virtual void pion::http::request_writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [inline, protected, virtual]

called after the request is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implements pion::http::writer.

Definition at line 139 of file request_writer.hpp.

References pion::http::writer::clear(), pion::http::writer::finished_writing(), pion::http::writer::get_logger(), and pion::http::writer::sending_chunked_message().

Referenced by bind_to_write_handler().

virtual void pion::http::request_writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [inline, protected, virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implements pion::http::writer.

Definition at line 118 of file request_writer.hpp.

References pion::http::writer::get_connection(), pion::http::writer::get_content_length(), and pion::http::writer::sending_chunked_message().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tab_l.gif0000644000372000001440000000130212314121440017204 0ustar robertousersGIF89a ,薴ŝɯͻ, ,@P`H$!%CqVe2XJ(Ġ+3 2$ kv-u*"}|}|~q(" $f 'l(&&$r & !){rƲεҽͼиP?Bm A%V܈!k/Đ;^$Ɩ#Mf)f͇(WLK҄ I)L:eD Cx*4 Uh %A^NKbeXkx!2t !5t]$%X.i[]YfEkg`:zҞ;}jaaM׸c瞽vۺ8ȋ'?9積G_>yu_ߞ]zw߭Ǿm浏G~თ/>٫|W}v;pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__password__hash-members.html0000644000372000001440000000665212314121441030027 0ustar robertousers pion: Member List

pion::error::bad_password_hash Member List

This is the complete list of members for pion::error::bad_password_hash, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__missing__symbol-members.html0000644000372000001440000000666612314121441030775 0ustar robertousers pion: Member List

pion::error::plugin_missing_symbol Member List

This is the complete list of members for pion::error::plugin_missing_symbol, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1cookie__auth-members.html0000644000372000001440000002322412314121441026327 0ustar robertousers pion: Member List

pion::http::cookie_auth Member List

This is the complete list of members for pion::http::cookie_auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
cookie_auth(user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="")pion::http::cookie_auth
expire_cache(const boost::posix_time::ptime &time_now)pion::http::cookie_auth [protected]
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_ok(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false)pion::http::cookie_auth [protected]
handle_redirection(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false)pion::http::cookie_auth [protected]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [virtual]
handle_unauthorized(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [protected]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
process_login(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::cookie_auth [protected]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::cookie_auth [virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]
~cookie_auth()pion::http::cookie_auth [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1ihash.html0000644000372000001440000000540512314121441022222 0ustar robertousers pion: pion::ihash Struct Reference

pion::ihash Struct Reference

#include <hash_map.hpp>

List of all members.

Public Member Functions

std::size_t operator() (std::string const &x) const

Detailed Description

case insensitive hash generic function copied from boost.unordered hash_equality documentation http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html

Definition at line 83 of file hash_map.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1message_1_1content__buffer__t-members.html0000644000372000001440000001137712314121441031535 0ustar robertousers pion: Member List

pion::http::message::content_buffer_t Member List

This is the complete list of members for pion::http::message::content_buffer_t, including all inherited members.
clear()pion::http::message::content_buffer_t [inline]
content_buffer_t()pion::http::message::content_buffer_t [inline]
content_buffer_t(const content_buffer_t &buf)pion::http::message::content_buffer_t [inline]
get() const pion::http::message::content_buffer_t [inline]
get()pion::http::message::content_buffer_t [inline]
is_empty() const pion::http::message::content_buffer_t [inline]
operator=(const content_buffer_t &buf)pion::http::message::content_buffer_t [inline]
resize(std::size_t len)pion::http::message::content_buffer_t [inline]
size() const pion::http::message::content_buffer_t [inline]
~content_buffer_t()pion::http::message::content_buffer_t [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1cookie__auth.html0000644000372000001440000006462012314121441024704 0ustar robertousers pion: pion::http::cookie_auth Class Reference

pion::http::cookie_auth Class Reference

#include <cookie_auth.hpp>

Inherits pion::http::auth.

List of all members.

Public Member Functions

 cookie_auth (user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="")
virtual ~cookie_auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
virtual void set_option (const std::string &name, const std::string &value)

Protected Member Functions

bool process_login (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
void handle_unauthorized (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
void handle_redirection (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false)
void handle_ok (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false)
void expire_cache (const boost::posix_time::ptime &time_now)

Detailed Description

cookie_auth: handles HTTP authentication and session management in accordance with RFC 2617 (http://tools.ietf.org/html/rfc2617 ) using cookies.

Definition at line 28 of file cookie_auth.hpp.


Constructor & Destructor Documentation

pion::http::cookie_auth::cookie_auth ( user_manager_ptr  userManager,
const std::string &  login = "/login",
const std::string &  logout = "/logout",
const std::string &  redirect = "" 
)

default constructor

Parameters:
userManager 
login - URL resource for login request. Typical login request has format: http://website/login?user="username"&pass="password"&url="redirection_url"
logout - URL resource for logout request. Typical logout request has format: http://website/logout?url="redirection_url"
redirect - if not empty, URL for redirection in case of authentication failure if empty - send code 401 on authentication failure

Definition at line 31 of file http_cookie_auth.cpp.

References pion::http::auth::set_logger().


Member Function Documentation

void pion::http::cookie_auth::expire_cache ( const boost::posix_time::ptime &  time_now  )  [protected]

Cache expiration cleanup. (Call it periodically)

Definition at line 261 of file http_cookie_auth.cpp.

Referenced by handle_request().

void pion::http::cookie_auth::handle_ok ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  new_cookie = "",
bool  delete_cookie = false 
) [protected]

used to send OK responses with new cookie

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 237 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by process_login().

void pion::http::cookie_auth::handle_redirection ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  redirection_url,
const std::string &  new_cookie = "",
bool  delete_cookie = false 
) [protected]

used to send redirection responses

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 199 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by handle_unauthorized(), and process_login().

bool pion::http::cookie_auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Note: if request matches "login" resource, then login sequences attempted. If "name" and "pass" attributes match user definition, a random cookie is created and associated with given user session. If request contains "url" attribute, then page redirection response returned. Otherwise - empty 204 response.

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implements pion::http::auth.

Definition at line 53 of file http_cookie_auth.cpp.

References expire_cache(), handle_unauthorized(), pion::http::auth::need_authentication(), and process_login().

void pion::http::cookie_auth::handle_unauthorized ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

used to send responses when access to resource is not authorized

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 171 of file http_cookie_auth.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and handle_redirection().

Referenced by handle_request(), and process_login().

bool pion::http::cookie_auth::process_login ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

check if given request is a login/logout and process it

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if it was a login/logout request and no future processing required.

Definition at line 105 of file http_cookie_auth.cpp.

References pion::algorithm::base64_encode(), handle_ok(), handle_redirection(), handle_unauthorized(), pion::http::auth::m_user_manager, and pion::http::server::strip_trailing_slash().

Referenced by handle_request().

void pion::http::cookie_auth::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

sets a configuration option Valid options:

  • "login" - URL resource for login request. Typical login request has format: http://website/login?user="username"&pass="password"&url="redirection_url"
  • "logout" - URL resource for logout request. Typical logout request has format: http://website/logout?url="redirection_url"
  • "redirect" - if not empty, URL for redirection in case of authentication failure if empty - send code 401 on authentication failure
Parameters:
name the name of the option to change
value the value of the option

Reimplemented from pion::http::auth.

Definition at line 93 of file http_cookie_auth.cpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/user_8hpp_source.html0000644000372000001440000006332212314121441021632 0ustar robertousers pion: include/pion/user.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1connection-members.html0000644000372000001440000004363012314121441025647 0ustar robertousers pion: Member List

pion::tcp::connection Member List

This is the complete list of members for pion::tcp::connection, including all inherited members.
accept(boost::asio::ip::tcp::acceptor &tcp_acceptor)pion::tcp::connection [inline]
async_accept(boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler)pion::tcp::connection [inline]
async_connect(const boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler)pion::tcp::connection [inline]
async_connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler)pion::tcp::connection [inline]
async_handshake_client(SSLHandshakeHandler handler)pion::tcp::connection [inline]
async_handshake_server(SSLHandshakeHandler handler)pion::tcp::connection [inline]
async_read(CompletionCondition completion_condition, ReadHandler handler)pion::tcp::connection [inline]
async_read(const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler)pion::tcp::connection [inline]
async_read_some(ReadHandler handler)pion::tcp::connection [inline]
async_read_some(ReadBufferType read_buffer, ReadHandler handler)pion::tcp::connection [inline]
async_write(const ConstBufferSequence &buffers, write_handler_t handler)pion::tcp::connection [inline]
cancel(void)pion::tcp::connection [inline]
close(void)pion::tcp::connection [inline]
connect(boost::asio::ip::tcp::endpoint &tcp_endpoint)pion::tcp::connection [inline]
connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port)pion::tcp::connection [inline]
connect(const std::string &remote_server, const unsigned int remote_port)pion::tcp::connection [inline]
connection(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::connection [inline, explicit]
connection(boost::asio::io_service &io_service, ssl_context_type &ssl_context)pion::tcp::connection [inline]
connection(boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)pion::tcp::connection [inline, protected]
connection_handler typedefpion::tcp::connection
create(boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)pion::tcp::connection [inline, static]
finish(void)pion::tcp::connection [inline]
get_io_service(void)pion::tcp::connection [inline]
get_keep_alive(void) const pion::tcp::connection [inline]
get_lifecycle(void) const pion::tcp::connection [inline]
get_pipelined(void) const pion::tcp::connection [inline]
get_read_buffer(void)pion::tcp::connection [inline]
get_remote_endpoint(void) const pion::tcp::connection [inline]
get_remote_ip(void) const pion::tcp::connection [inline]
get_remote_port(void) const pion::tcp::connection [inline]
get_socket(void)pion::tcp::connection [inline]
get_socket(void) const pion::tcp::connection [inline]
get_ssl_flag(void) const pion::tcp::connection [inline]
get_ssl_socket(void)pion::tcp::connection [inline]
get_ssl_socket(void) const pion::tcp::connection [inline]
handshake_client(void)pion::tcp::connection [inline]
handshake_server(void)pion::tcp::connection [inline]
is_open(void) const pion::tcp::connection [inline]
LIFECYCLE_CLOSE enum value (defined in pion::tcp::connection)pion::tcp::connection
LIFECYCLE_KEEPALIVE enum value (defined in pion::tcp::connection)pion::tcp::connection
LIFECYCLE_PIPELINED enum value (defined in pion::tcp::connection)pion::tcp::connection
lifecycle_type enum namepion::tcp::connection
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::tcp::connection [inline]
read(CompletionCondition completion_condition, boost::system::error_code &ec)pion::tcp::connection [inline]
read(const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec)pion::tcp::connection [inline]
READ_BUFFER_SIZE enum value (defined in pion::tcp::connection)pion::tcp::connection
read_buffer_type typedefpion::tcp::connection
read_some(boost::system::error_code &ec)pion::tcp::connection [inline]
read_some(ReadBufferType read_buffer, boost::system::error_code &ec)pion::tcp::connection [inline]
save_read_pos(const char *read_ptr, const char *read_end_ptr)pion::tcp::connection [inline]
set_lifecycle(lifecycle_type t)pion::tcp::connection [inline]
socket_type typedefpion::tcp::connection
ssl_context_type typedefpion::tcp::connection
ssl_socket_type typedefpion::tcp::connection
write(const ConstBufferSequence &buffers, boost::system::error_code &ec)pion::tcp::connection [inline]
~connection()pion::tcp::connection [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/spdy_2parser_8hpp_source.html0000644000372000001440000004701712314121440023273 0ustar robertousers pion: include/pion/spdy/parser.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/plugin__server_8hpp_source.html0000644000372000001440000003010412314121440023666 0ustar robertousers pion: include/pion/http/plugin_server.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_echo_service-members.html0000644000372000001440000001156212314121441027177 0ustar robertousers pion: Member List

pion::plugins::EchoService Member List

This is the complete list of members for pion::plugins::EchoService, including all inherited members.
EchoService(void) (defined in pion::plugins::EchoService)pion::plugins::EchoService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::EchoService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~EchoService() (defined in pion::plugins::EchoService)pion::plugins::EchoService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1user.html0000644000372000001440000002260512314121441021666 0ustar robertousers pion: pion::user Class Reference

pion::user Class Reference

#include <user.hpp>

List of all members.

Public Member Functions

 user (std::string const &username)
 construct a new user object
 user (std::string const &username, std::string const &password)
 construct a new user object
virtual ~user ()
 virtual destructor
std::string const & get_username () const
 returns user name as a string
std::string const & get_password () const
 returns password for the user (encrypted if SSL is enabled)
virtual bool match_password (const std::string &password) const
virtual void set_password (const std::string &password)
 sets password credentials for given user
virtual void set_password_hash (const std::string &password_hash)
 sets encrypted password credentials for given user

Protected Attributes

const std::string m_username
 username string
std::string m_password
 password string (actual contents depends on implementation)
unsigned char m_password_hash [SHA_DIGEST_LENGTH]
 SHA1 hash of the password.

Detailed Description

user: base class to store user credentials

Definition at line 39 of file user.hpp.


Member Function Documentation

virtual bool pion::user::match_password ( const std::string &  password  )  const [inline, virtual]

matches password credential for given user

Parameters:
password password credentials

Definition at line 70 of file user.hpp.

References m_password, and m_password_hash.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1http_1_1types-members.html0000644000372000001440000004562112314121441025266 0ustar robertousers pion: Member List

pion::http::types Member List

This is the complete list of members for pion::http::types, including all inherited members.
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
get_date_string(const time_t t)pion::http::types [static]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
~types()pion::http::types [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/hash__map_8hpp_source.html0000644000372000001440000003330012314121440022563 0ustar robertousers pion: include/pion/hash_map.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/plugin_8cpp_source.html0000644000372000001440000012514112314121441022143 0ustar robertousers pion: src/plugin.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/plugin__manager_8hpp_source.html0000644000372000001440000012661312314121441024006 0ustar robertousers pion: include/pion/plugin_manager.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__server.html0000644000372000001440000005506512314121441025301 0ustar robertousers pion: pion::http::plugin_server Class Reference

pion::http::plugin_server Class Reference

#include <plugin_server.hpp>

Inherits pion::http::server.

List of all members.

Public Member Functions

virtual ~plugin_server ()
 default destructor
 plugin_server (const unsigned int tcp_port=0)
 plugin_server (const boost::asio::ip::tcp::endpoint &endpoint)
 plugin_server (scheduler &sched, const unsigned int tcp_port=0)
 plugin_server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
void add_service (const std::string &resource, http::plugin_service *service_ptr)
void load_service (const std::string &resource, const std::string &service_name)
void set_service_option (const std::string &resource, const std::string &name, const std::string &value)
void load_service_config (const std::string &config_name)
virtual void clear (void)
 clears all the web services that are currently configured

Protected Member Functions

virtual void before_starting (void)
 called before the TCP server starts listening for new connections
virtual void after_stopping (void)
 called after the TCP server has stopped listening for new connections

Detailed Description

plugin_server: a server that handles HTTP connections using http::plugin_service plug-ins

Definition at line 31 of file plugin_server.hpp.


Constructor & Destructor Documentation

pion::http::plugin_server::plugin_server ( const unsigned int  tcp_port = 0  )  [inline, explicit]

creates a new plugin_server object

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Definition at line 45 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [inline, explicit]

creates a new plugin_server object

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Definition at line 56 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [inline, explicit]

creates a new plugin_server object

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Definition at line 68 of file plugin_server.hpp.

pion::http::plugin_server::plugin_server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [inline]

creates a new plugin_server object

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Definition at line 80 of file plugin_server.hpp.


Member Function Documentation

void pion::http::plugin_server::add_service ( const std::string &  resource,
http::plugin_service service_ptr 
)

adds a new web service to the web server

Parameters:
resource the resource name or uri-stem to bind to the web service
service_ptr a pointer to the web service

Definition at line 27 of file http_plugin_server.cpp.

References pion::plugin_manager< PluginType >::add(), pion::http::server::add_resource(), pion::tcp::server::m_logger, pion::http::plugin_service::set_resource(), and pion::http::server::strip_trailing_slash().

void pion::http::plugin_server::load_service ( const std::string &  resource,
const std::string &  service_name 
)

loads a web service from a shared object file

Parameters:
resource the resource name or uri-stem to bind to the web service
service_name the name of the web service to load (searches plug-in directories and appends extensions)

Definition at line 37 of file http_plugin_server.cpp.

References pion::http::server::add_resource(), pion::plugin_manager< PluginType >::load(), pion::tcp::server::m_logger, pion::http::plugin_service::set_resource(), and pion::http::server::strip_trailing_slash().

Referenced by load_service_config().

void pion::http::plugin_server::load_service_config ( const std::string &  config_name  ) 

Parses a simple web service configuration file. Each line in the file starts with one of the following commands:

path VALUE : adds a directory to the web service search path service RESOURCE FILE : loads web service bound to RESOURCE from FILE option RESOURCE NAME=VALUE : sets web service option NAME to VALUE

Blank lines or lines that begin with # are ignored as comments.

Parameters:
config_name the name of the config file to parse

Definition at line 56 of file http_plugin_server.cpp.

References pion::plugin::add_plugin_directory(), pion::plugin::find_config_file(), load_service(), pion::tcp::server::m_logger, pion::http::server::set_authentication(), and set_service_option().

void pion::http::plugin_server::set_service_option ( const std::string &  resource,
const std::string &  name,
const std::string &  value 
)

sets a configuration option for the web service associated with resource

Parameters:
resource the resource name or uri-stem that identifies the web service
name the name of the configuration option
value the value to set the option to

Definition at line 47 of file http_plugin_server.cpp.

References pion::tcp::server::m_logger, pion::plugin_manager< PluginType >::run(), pion::http::plugin_service::set_option(), and pion::http::server::strip_trailing_slash().

Referenced by load_service_config().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x73.html0000644000372000001440000004222012314121441022133 0ustar robertousers pion: Class Members - Functions
 

- s -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1spdy__control__frame__info-members.html0000644000372000001440000000605312314121441031457 0ustar robertousers pion: Member List
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x63.html0000644000372000001440000002422712314121441022141 0ustar robertousers pion: Class Members - Functions
 

- c -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/plugin_8hpp_source.html0000644000372000001440000010766312314121441022161 0ustar robertousers pion: include/pion/plugin.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x78.html0000644000372000001440000001004012314121441022133 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request-members.html0000644000372000001440000013471212314121441025373 0ustar robertousers pion: Member List

pion::http::request Member List

This is the complete list of members for pion::http::request, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
add_query(const std::string &key, const std::string &value)pion::http::request [inline]
append_cookie_headers(void)pion::http::request [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_query(const std::string &key, const std::string &value)pion::http::request [inline]
change_resource(const std::string &str)pion::http::request [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::request [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &key)pion::http::message [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_query(const std::string &key)pion::http::request [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_method(void) const pion::http::request [inline]
get_original_resource(void) const pion::http::request [inline]
get_queries(void)pion::http::request [inline]
get_query(const std::string &key) const pion::http::request [inline]
get_query_string(void) const pion::http::request [inline]
get_remote_ip(void)pion::http::message [inline]
get_resource(void) const pion::http::request [inline]
get_status() const pion::http::message [inline]
get_user() const pion::http::request [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
has_query(const std::string &key) const pion::http::request [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const pion::http::request [inline, virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
request(const std::string &resource)pion::http::request [inline]
request(void)pion::http::request [inline]
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &value)pion::http::request [inline]
set_content(const char *value, size_t size)pion::http::request [inline]
set_content_length(size_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_method(const std::string &str)pion::http::request [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_query_string(const std::string &str)pion::http::request [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_resource(const std::string &str)pion::http::request [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_user(user_ptr user)pion::http::request [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const pion::http::request [inline, protected, virtual]
update_transfer_encoding_using_header(void)pion::http::message [inline]
use_query_params_for_post_content(void)pion::http::request [inline]
use_query_params_for_query_string(void)pion::http::request [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~request()pion::http::request [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__arg-members.html0000644000372000001440000000661312314121441025571 0ustar robertousers pion: Member List

pion::error::bad_arg Member List

This is the complete list of members for pion::error::bad_arg, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x68.html0000644000372000001440000001717012314121441021132 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- h -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file.html0000644000372000001440000004064012314121441025041 0ustar robertousers pion: pion::plugins::DiskFile Class Reference

pion::plugins::DiskFile Class Reference

#include <FileService.hpp>

List of all members.

Public Member Functions

 DiskFile (void)
 default constructor
 DiskFile (const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime)
 used to construct new disk file objects
 DiskFile (const DiskFile &f)
 copy constructor
void update (void)
 updates the file_size and last_modified timestamp to disk
void read (void)
 reads content from disk into file_content buffer (may throw)
bool checkUpdated (void)
const boost::filesystem::path & getFilePath (void) const
 return path to the cached file
char * getFileContent (void)
 returns content of the cached file
bool hasFileContent (void) const
 returns true if there is cached file content
unsigned long getFileSize (void) const
 returns size of the file's content
std::time_t getLastModified (void) const
 returns timestamp that the cached file was last modified (0 = cache disabled)
const std::string & getLastModifiedString (void) const
 returns timestamp that the cached file was last modified (string format)
const std::string & getMimeType (void) const
 returns mime type for the cached file
void setFilePath (const boost::filesystem::path &p)
 sets the path to the cached file
void appendFilePath (const std::string &p)
 appends to the path of the cached file
void setMimeType (const std::string &t)
 sets the mime type for the cached file
void resetFileContent (unsigned long n=0)
 resets the size of the file content buffer

Protected Attributes

boost::filesystem::path m_file_path
 path to the cached file
boost::shared_array< char > m_file_content
 content of the cached file
std::streamsize m_file_size
 size of the file's content
std::time_t m_last_modified
 timestamp that the cached file was last modified (0 = cache disabled)
std::string m_last_modified_string
 timestamp that the cached file was last modified (string format)
std::string m_mime_type
 mime type for the cached file

Detailed Description

DiskFile: class used to represent files stored on disk

Definition at line 37 of file FileService.hpp.


Member Function Documentation

bool pion::plugins::DiskFile::checkUpdated ( void   ) 

checks if the file has been updated and updates vars if it has (may throw)

Returns:
true if the file was updated

Definition at line 787 of file FileService.cpp.

References pion::http::types::get_date_string(), m_file_path, m_file_size, m_last_modified, m_last_modified_string, and read().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__not__found-members.html0000644000372000001440000000664712314121441027731 0ustar robertousers pion: Member List

pion::error::plugin_not_found Member List

This is the complete list of members for pion::error::plugin_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_type.html0000644000372000001440000001255012314121441021403 0ustar robertousers pion: Class Members - Typedefs
 

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1directory__not__found.html0000644000372000001440000000510112314121441026767 0ustar robertousers pion: pion::error::directory_not_found Class Reference

pion::error::directory_not_found Class Reference

exception thrown if a required directory is not found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a required directory is not found

Definition at line 174 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__auth_8cpp_source.html0000644000372000001440000002677712314121441023023 0ustar robertousers pion: src/http_auth.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1plugin_1_1data__type.html0000644000372000001440000001467112314121441025123 0ustar robertousers pion: pion::plugin::data_type Struct Reference

pion::plugin::data_type Struct Reference

#include <plugin.hpp>

List of all members.

Public Member Functions

 data_type (void)
 default constructors for convenience
 data_type (const std::string &plugin_name)
 data_type (const data_type &p)

Public Attributes

void * m_lib_handle
 symbol library loaded from a shared object file
void * m_create_func
 function used to create instances of the plug-in object
void * m_destroy_func
 function used to destroy instances of the plug-in object
std::string m_plugin_name
 the name of the plugin (must be unique per process)
unsigned long m_references
 number of references to this class

Detailed Description

data_type: object to hold shared library symbols

Definition at line 139 of file plugin.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_hello_service-members.html0000644000372000001440000001160212314121441027357 0ustar robertousers pion: Member List

pion::plugins::HelloService Member List

This is the complete list of members for pion::plugins::HelloService, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
HelloService(void) (defined in pion::plugins::HelloService)pion::plugins::HelloService [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::HelloService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~HelloService() (defined in pion::plugins::HelloService)pion::plugins::HelloService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6b.html0000644000372000001440000000737712314121441022227 0ustar robertousers pion: Class Members - Functions
 

- k -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6b.html0000644000372000001440000000766512314121441021214 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- k -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/logger_8cpp_source.html0000644000372000001440000000560112314121441022122 0ustar robertousers pion: src/logger.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x67.html0000644000372000001440000004364412314121441022151 0ustar robertousers pion: Class Members - Functions
 

- g -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1iequal__to.html0000644000372000001440000000552412314121441023251 0ustar robertousers pion: pion::iequal_to Struct Reference

pion::iequal_to Struct Reference

#include <hash_map.hpp>

List of all members.

Public Member Functions

bool operator() (std::string const &x, std::string const &y) const

Detailed Description

case insensitive string equality predicate copied from boost.unordered hash_equality documentation http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/hash_equality.html

Definition at line 70 of file hash_map.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1one__to__one__scheduler-members.html0000644000372000001440000003260412314121441027157 0ustar robertousers pion: Member List

pion::one_to_one_scheduler Member List

This is the complete list of members for pion::one_to_one_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::one_to_one_scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)pion::one_to_one_scheduler [inline, virtual]
get_io_service(boost::uint32_t n)pion::one_to_one_scheduler [inline, virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_next_servicepion::one_to_one_scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_service_poolpion::one_to_one_scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
one_to_one_scheduler(void)pion::one_to_one_scheduler [inline]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
service_pool_type typedefpion::one_to_one_scheduler [protected]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::one_to_one_scheduler [virtual]
stop_services(void)pion::one_to_one_scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~one_to_one_scheduler()pion::one_to_one_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6d.html0000644000372000001440000001050712314121441022216 0ustar robertousers pion: Class Members - Functions
 

- m -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__ptr.html0000644000372000001440000001510512314121441023227 0ustar robertousers pion: pion::plugin_ptr< InterfaceClassType > Class Template Reference

pion::plugin_ptr< InterfaceClassType > Class Template Reference

#include <plugin.hpp>

Inherits pion::plugin.

List of all members.

Public Member Functions

 plugin_ptr (void)
 default constructor & destructor
 plugin_ptr (const plugin_ptr &p)
 copy constructor
plugin_ptroperator= (const plugin_ptr &p)
 assignment operator
InterfaceClassType * create (void)
 creates a new instance of the plug-in object
void destroy (InterfaceClassType *object_ptr)
 destroys an instance of the plug-in object

Protected Types

typedef InterfaceClassType * CreateObjectFunction (void)
 data type for a function that is used to create object instances
typedef void DestroyObjectFunction (InterfaceClassType *)
 data type for a function that is used to destroy object instances

Detailed Description

template<typename InterfaceClassType>
class pion::plugin_ptr< InterfaceClassType >

plugin_ptr: smart pointer that manages plug-in code loaded from shared object libraries

Definition at line 301 of file plugin.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x73.html0000644000372000001440000004454512314121441021134 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- s -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tab_r.gif0000644000372000001440000000503112314121440017215 0ustar robertousersGIF89a,薴ŝɯͻ,,@pH,Ȥrl:ШtJZجv h d@L"F:򑐌$9 (8&Nz (GFB^!˨)WVl)1 w̥.wY0Ib|Hpf:e pJ}Ȧ6nz 80%"8v~ @JЂMBІ:D'ZPKF ּ&16юz HGJRb L5Җ0LgJӚ#(e>Ӟ@ PJԢHMRԦ:PTJժ&5;%Uծz` XJVCjYֶp\Uxͫ^׾i)$Mb:v, ಘͬf7z hGKҚMjWֺ*$SPͭnwm +Mr:E?9Zͮv9" xKbLz^A|ͯ0/LN(; n0'LaJ0{/{ؘG|(SCr. v1wc6@LdHNd/PLeOXp|+s2L_153M5t3_:wsgʹπp?/FFЎt!-JҖ1NӞuA-Pԝ>53UWծ4cYZѶsA׀5,aƶ3=e3~-3Sc6mo2Mq>7ӭn$D~7,y1m}v\/N3#S\gu-mO0C\'_S^|.c.0ל49~s=3d:u)?F;ˮW|;W)vt˽w|=xA;pion-5.0.6+dfsg.orig/doc/html/classpion_1_1admin__rights.html0000644000372000001440000001435512314121441023522 0ustar robertousers pion: pion::admin_rights Class Reference

pion::admin_rights Class Reference

#include <admin_rights.hpp>

List of all members.

Public Member Functions

 admin_rights (bool use_log=true)
virtual ~admin_rights ()
 destructor releases administrative rights
void release (void)
 releases administrative rights

Static Public Member Functions

static long run_as_user (const std::string &user_name)
 calculates the user id based upon the user configuration parameter
static long run_as_group (const std::string &group_name)
 calculates the group id based upon the group configuration parameter

Detailed Description

admin_rights: obtains administrative rights for the process

Definition at line 25 of file admin_rights.hpp.


Constructor & Destructor Documentation

pion::admin_rights::admin_rights ( bool  use_log = true  ) 

constructs object, obtaining administrative rights; will block if another thread has already obtained rights

Parameters:
use_log if false, then no logging will be performed

Definition at line 62 of file admin_rights.cpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response.html0000644000372000001440000006676512314121441024125 0ustar robertousers pion: pion::http::response Class Reference

pion::http::response Class Reference

#include <response.hpp>

Inherits pion::http::message.

List of all members.

Public Member Functions

 response (const http::request &http_request_ptr)
 response (const std::string &request_method)
 response (const response &http_response)
 copy constructor
 response (void)
virtual ~response ()
 virtual destructor
virtual void clear (void)
 clears all response data
virtual bool is_content_length_implied (void) const
 the content length may be implied for certain types of responses
void update_request_info (const http::request &http_request)
void set_status_code (unsigned int n)
 sets the HTTP response status code
void set_status_message (const std::string &msg)
 sets the HTTP response status message
unsigned int get_status_code (void) const
 returns the HTTP response status code
const std::string & get_status_message (void) const
 returns the HTTP response status message
void set_cookie (const std::string &name, const std::string &value)
void set_cookie (const std::string &name, const std::string &value, const std::string &path)
void set_cookie (const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age)
void set_cookie (const std::string &name, const std::string &value, const unsigned long max_age)
void delete_cookie (const std::string &name)
 deletes cookie called name by adding a Set-Cookie header (cookie has no path)
void delete_cookie (const std::string &name, const std::string &path)
 deletes cookie called name by adding a Set-Cookie header (cookie has a path)
void set_last_modified (const unsigned long t)
 sets the time that the response was last modified (Last-Modified)

Protected Member Functions

virtual void update_first_line (void) const
 updates the string containing the first line for the HTTP message
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message

Detailed Description

response: container for HTTP response information

Definition at line 27 of file response.hpp.


Constructor & Destructor Documentation

pion::http::response::response ( const http::request http_request_ptr  )  [inline]

constructs a new response object for a particular request

Parameters:
http_request_ptr the request that this is responding to

Definition at line 37 of file response.hpp.

References update_request_info().

pion::http::response::response ( const std::string &  request_method  )  [inline]

constructs a new response object for a particular request method

Parameters:
request_method the method used by the HTTP request we are responding to

Definition at line 49 of file response.hpp.

pion::http::response::response ( void   )  [inline]

default constructor: you are strongly encouraged to use one of the other constructors, since response parsing is influenced by the request method

Definition at line 64 of file response.hpp.


Member Function Documentation

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const unsigned long  max_age 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109)

Parameters:
name the name of the cookie
value the value of the cookie
max_age the life of the cookie, in seconds (0 = discard)

Definition at line 176 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const std::string &  path,
const unsigned long  max_age 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109)

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie
max_age the life of the cookie, in seconds (0 = discard)

Definition at line 162 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value,
const std::string &  path 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109) the cookie will be discarded by the user-agent when it closes

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie

Definition at line 147 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

void pion::http::response::set_cookie ( const std::string &  name,
const std::string &  value 
) [inline]

sets a cookie by adding a Set-Cookie header (see RFC 2109) the cookie will be discarded by the user-agent when it closes

Parameters:
name the name of the cookie
value the value of the cookie

Definition at line 134 of file response.hpp.

References pion::http::message::add_header(), and pion::http::types::make_set_cookie_header().

Referenced by append_cookie_headers().

void pion::http::response::update_request_info ( const http::request http_request  )  [inline]

Updates HTTP request information for the response object (use this if the response cannot be constructed using the request)

Parameters:
http_request the request that this is responding to

Definition at line 95 of file response.hpp.

References pion::http::request::get_method(), pion::http::message::get_version_major(), pion::http::message::get_version_minor(), pion::http::message::set_chunks_supported(), set_status_code(), set_status_message(), pion::http::message::set_version_major(), and pion::http::message::set_version_minor().

Referenced by response().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1single__service__scheduler.html0000644000372000001440000001645312314121441026251 0ustar robertousers pion: pion::single_service_scheduler Class Reference

pion::single_service_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::multi_thread_scheduler.

List of all members.

Public Member Functions

 single_service_scheduler (void)
 constructs a new single_service_scheduler
virtual ~single_service_scheduler ()
 virtual destructor
virtual boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void finish_services (void)
 finishes all services used to schedule work

Protected Attributes

boost::asio::io_service m_service
 service used to manage async I/O events
boost::asio::deadline_timer m_timer
 timer used to periodically check for shutdown

Detailed Description

single_service_scheduler: uses a single IO service to schedule work

Definition at line 246 of file scheduler.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1message.html0000644000372000001440000023350712314121441023701 0ustar robertousers pion: pion::http::message Class Reference

pion::http::message Class Reference

#include <message.hpp>

Inherits pion::http::types.

Inherited by pion::http::request, and pion::http::response.

List of all members.

Classes

class  content_buffer_t
 a simple helper class used to manage a fixed-size payload content buffer More...
struct  receive_error_t
 data type for library errors returned during receive() operations More...

Public Types

enum  data_status_t { STATUS_NONE, STATUS_TRUNCATED, STATUS_PARTIAL, STATUS_OK }
 

defines message data integrity status codes


typedef std::vector
< boost::asio::const_buffer > 
write_buffers_t
 data type for I/O write buffers (these wrap existing data to be sent)
typedef std::vector< char > chunk_cache_t
 used to cache chunked data

Public Member Functions

 message (void)
 constructs a new HTTP message object
 message (const message &http_msg)
 copy constructor
messageoperator= (const message &http_msg)
 assignment operator
virtual ~message ()
 virtual destructor
virtual void clear (void)
 clears all message data
virtual bool is_content_length_implied (void) const =0
 should return true if the content length can be implied without headers
bool is_valid (void) const
 returns true if the message is valid
bool get_chunks_supported (void) const
 returns true if chunked transfer encodings are supported
boost::asio::ip::address & get_remote_ip (void)
 returns IP address of the remote endpoint
boost::uint16_t get_version_major (void) const
 returns the major HTTP version number
boost::uint16_t get_version_minor (void) const
 returns the minor HTTP version number
std::string get_version_string (void) const
 returns a string representation of the HTTP version (i.e. "HTTP/1.1")
size_t get_content_length (void) const
 returns the length of the payload content (in bytes)
bool is_chunked (void) const
 returns true if the message content is chunked
bool is_content_buffer_allocated () const
 returns true if buffer for content is allocated
std::size_t get_content_buffer_size () const
 returns size of allocated buffer
char * get_content (void)
 returns a pointer to the payload content, or empty string if there is none
const char * get_content (void) const
 returns a const pointer to the payload content, or empty string if there is none
chunk_cache_tget_chunk_cache (void)
 returns a reference to the chunk cache
const std::string & get_header (const std::string &key) const
 returns a value for the header if any are defined; otherwise, an empty string
ihash_multimap & get_headers (void)
 returns a reference to the HTTP headers
bool has_header (const std::string &key) const
 returns true if at least one value for the header is defined
const std::string & get_cookie (const std::string &key) const
ihash_multimap & get_cookies (void)
 returns the cookie parameters
bool has_cookie (const std::string &key) const
void add_cookie (const std::string &key, const std::string &value)
void change_cookie (const std::string &key, const std::string &value)
void delete_cookie (const std::string &key)
const std::string & get_first_line (void) const
 returns a string containing the first line for the HTTP message
bool has_missing_packets () const
 true if there were missing packets
void set_missing_packets (bool newVal)
 set to true when missing packets detected
bool has_data_after_missing_packets () const
 true if more data seen after the missing packets
void set_data_after_missing_packet (bool newVal)
void set_is_valid (bool b=true)
 sets whether or not the message is valid
void set_chunks_supported (bool b)
 set to true if chunked transfer encodings are supported
void set_remote_ip (const boost::asio::ip::address &ip)
 sets IP address of the remote endpoint
void set_version_major (const boost::uint16_t n)
 sets the major HTTP version number
void set_version_minor (const boost::uint16_t n)
 sets the minor HTTP version number
void set_content_length (size_t n)
 sets the length of the payload content (in bytes)
void set_do_not_send_content_length (void)
 if called, the content-length will not be sent in the HTTP headers
data_status_t get_status () const
 return the data receival status
void set_status (data_status_t newVal)
void update_content_length_using_header (void)
 sets the length of the payload content using the Content-Length header
void update_transfer_encoding_using_header (void)
 sets the transfer coding using the Transfer-Encoding header
char * create_content_buffer (void)
void set_content (const std::string &content)
 resets payload content to match the value of a string
void clear_content (void)
 clears payload content buffer
void set_content_type (const std::string &type)
 sets the content type for the message payload
void add_header (const std::string &key, const std::string &value)
 adds a value for the HTTP header named key
void change_header (const std::string &key, const std::string &value)
 changes the value for the HTTP header named key
void delete_header (const std::string &key)
 removes all values for the HTTP header named key
bool check_keep_alive (void) const
 returns true if the HTTP connection may be kept alive
void prepare_buffers_for_send (write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)
std::size_t send (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)
std::size_t receive (tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)
std::size_t receive (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))
std::size_t write (std::ostream &out, boost::system::error_code &ec, bool headers_only=false)
std::size_t read (std::istream &in, boost::system::error_code &ec, parser &http_parser)
std::size_t read (std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))
void concatenate_chunks (void)

Protected Member Functions

void prepare_headers_for_send (const bool keep_alive, const bool using_chunks)
void append_headers (write_buffers_t &write_buffers)
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message
void clear_first_line (void) const
virtual void update_first_line (void) const =0
 updates the string containing the first line for the HTTP message

Static Protected Member Functions

template<typename DictionaryType >
static const std::string & get_value (const DictionaryType &dict, const std::string &key)
template<typename DictionaryType >
static void change_value (DictionaryType &dict, const std::string &key, const std::string &value)
template<typename DictionaryType >
static void delete_value (DictionaryType &dict, const std::string &key)

Protected Attributes

std::string m_first_line

Detailed Description

message: base container for HTTP messages

Definition at line 49 of file message.hpp.


Member Function Documentation

void pion::http::message::add_cookie ( const std::string &  key,
const std::string &  value 
) [inline]

adds a value for the cookie since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 240 of file message.hpp.

void pion::http::message::append_headers ( write_buffers_t write_buffers  )  [inline, protected]

appends the message's HTTP headers to a vector of write buffers

Parameters:
write_buffers the buffers to append HTTP headers into

Definition at line 579 of file message.hpp.

void pion::http::message::change_cookie ( const std::string &  key,
const std::string &  value 
) [inline]

changes the value of a cookie since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 246 of file message.hpp.

template<typename DictionaryType >
static void pion::http::message::change_value ( DictionaryType &  dict,
const std::string &  key,
const std::string &  value 
) [inline, static, protected]

Changes the value for a dictionary key. Adds the key if it does not already exist. If multiple values exist for the key, they will be removed and only the new value will remain.

Parameters:
dict the dictionary object to update
key the key to change the value for
value the value to assign to the key

Definition at line 620 of file message.hpp.

Referenced by pion::http::request::change_query().

void pion::http::message::clear_first_line ( void   )  const [inline, protected]

erases the string containing the first line for the HTTP message (it will be updated the next time get_first_line() is called)

Definition at line 662 of file message.hpp.

Referenced by pion::http::request::set_method(), pion::http::request::set_query_string(), pion::http::request::set_resource(), pion::http::response::set_status_code(), and pion::http::response::set_status_message().

void pion::http::message::concatenate_chunks ( void   ) 

pieces together all the received chunks

Definition at line 230 of file http_message.cpp.

References create_content_buffer(), and set_content_length().

Referenced by pion::http::parser::check_premature_eof(), pion::http::parser::finish(), and pion::http::parser::parse().

char* pion::http::message::create_content_buffer ( void   )  [inline]

creates a payload content buffer of size m_content_length and returns a pointer to the new buffer (memory is managed by message class)

Definition at line 332 of file message.hpp.

Referenced by concatenate_chunks(), pion::http::parser::finish(), pion::http::parser::finish_header_parsing(), pion::http::request::set_content(), and pion::http::request::use_query_params_for_post_content().

void pion::http::message::delete_cookie ( const std::string &  key  )  [inline]

removes all values for a cookie since cookie names are insensitive, key should use lowercase alpha chars

Reimplemented in pion::http::response.

Definition at line 252 of file message.hpp.

template<typename DictionaryType >
static void pion::http::message::delete_value ( DictionaryType &  dict,
const std::string &  key 
) [inline, static, protected]

Deletes all values for a key

Parameters:
dict the dictionary object to update
key the key to delete

Definition at line 651 of file message.hpp.

Referenced by pion::http::request::delete_query().

const std::string& pion::http::message::get_cookie ( const std::string &  key  )  const [inline]

returns a value for the cookie if any are defined; otherwise, an empty string since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 223 of file message.hpp.

template<typename DictionaryType >
static const std::string& pion::http::message::get_value ( const DictionaryType &  dict,
const std::string &  key 
) [inline, static, protected]

Returns the first value in a dictionary if key is found; or an empty string if no values are found

Parameters:
dict the dictionary to search for key
key the key to search for
Returns:
value if found; empty string if not

Definition at line 603 of file message.hpp.

Referenced by pion::http::request::get_query().

bool pion::http::message::has_cookie ( const std::string &  key  )  const [inline]

returns true if at least one value for the cookie is defined since cookie names are insensitive, key should use lowercase alpha chars

Definition at line 234 of file message.hpp.

void pion::http::message::prepare_buffers_for_send ( write_buffers_t write_buffers,
const bool  keep_alive,
const bool  using_chunks 
) [inline]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize
keep_alive true if the connection should be kept alive
using_chunks true if the payload content will be sent in chunks

Definition at line 385 of file message.hpp.

Referenced by send(), and write().

void pion::http::message::prepare_headers_for_send ( const bool  keep_alive,
const bool  using_chunks 
) [inline, protected]

prepares HTTP headers for a send operation

Parameters:
keep_alive true if the connection should be kept alive
using_chunks true if the payload content will be sent in chunks

Definition at line 562 of file message.hpp.

std::size_t pion::http::message::read ( std::istream &  in,
boost::system::error_code &  ec,
bool  headers_only = false,
std::size_t  max_content_length = static_cast<size_t>(-1) 
)

reads a new message from a std::istream (blocks until finished)

Parameters:
in std::istream to use
ec contains error code if the read fails
headers_only if true then only HTTP headers are read
max_content_length maximum number of content bytes received
Returns:
std::size_t number of bytes read from the connection

Definition at line 219 of file http_message.cpp.

References pion::http::parser::parse_headers_only(), read(), and pion::http::parser::set_max_content_length().

std::size_t pion::http::message::read ( std::istream &  in,
boost::system::error_code &  ec,
parser http_parser 
)

reads a new message from a std::istream (blocks until finished)

Parameters:
in std::istream to use
ec contains error code if the read fails
http_parser http parser object to use
Returns:
std::size_t number of bytes read from the connection

Definition at line 180 of file http_message.cpp.

References pion::http::parser::check_premature_eof(), clear(), pion::http::parser::get_total_bytes_read(), pion::http::parser::parse(), and pion::http::parser::set_read_buffer().

Referenced by read().

std::size_t pion::http::message::receive ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
bool  headers_only = false,
std::size_t  max_content_length = static_cast<size_t>(-1) 
)

receives a new message from a TCP connection (blocks until finished)

Parameters:
tcp_conn TCP connection to use
ec contains error code if the receive fails
headers_only if true then only HTTP headers are received
max_content_length maximum number of content bytes received
Returns:
std::size_t number of bytes read from the connection

Definition at line 143 of file http_message.cpp.

References pion::http::parser::parse_headers_only(), receive(), and pion::http::parser::set_max_content_length().

std::size_t pion::http::message::receive ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
parser http_parser 
)
std::size_t pion::http::message::send ( tcp::connection tcp_conn,
boost::system::error_code &  ec,
bool  headers_only = false 
)

sends the message over a TCP connection (blocks until finished)

Parameters:
tcp_conn TCP connection to use
ec contains error code if the send fails
headers_only if true then only HTTP headers are sent
Returns:
std::size_t number of bytes written to the connection

Definition at line 33 of file http_message.cpp.

References get_content(), get_content_length(), pion::tcp::connection::get_keep_alive(), prepare_buffers_for_send(), and pion::tcp::connection::write().

std::size_t pion::http::message::write ( std::ostream &  out,
boost::system::error_code &  ec,
bool  headers_only = false 
)

writes the message to a std::ostream (blocks until finished)

Parameters:
out std::ostream to use
ec contains error code if the write fails
headers_only if true then only HTTP headers are written
Returns:
std::size_t number of bytes written to the connection

Definition at line 154 of file http_message.cpp.

References get_content(), get_content_length(), and prepare_buffers_for_send().


Member Data Documentation

std::string pion::http::message::m_first_line [mutable, protected]

first line sent in an HTTP message (i.e. "GET / HTTP/1.1" for request, or "HTTP/1.1 200 OK" for response)

Definition at line 672 of file message.hpp.

Referenced by operator=(), pion::http::response::update_first_line(), and pion::http::request::update_first_line().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1reader.html0000644000372000001440000002672112314121441023515 0ustar robertousers pion: pion::http::reader Class Reference

pion::http::reader Class Reference

#include <reader.hpp>

Inherits pion::http::parser.

Inherited by pion::http::request_reader, and pion::http::response_reader.

List of all members.

Public Member Functions

void receive (void)
 Incrementally reads & parses the HTTP message.
tcp::connection_ptr & get_connection (void)
 returns a shared pointer to the TCP connection
void set_timeout (boost::uint32_t seconds)
 sets the maximum number of seconds for read operations

Protected Member Functions

 reader (const bool is_request, tcp::connection_ptr &tcp_conn)
void consume_bytes (const boost::system::error_code &read_error, std::size_t bytes_read)
void consume_bytes (void)
 Consumes bytes that have been read using an HTTP parser.
virtual void read_bytes (void)=0
 Reads more bytes from the TCP connection.
virtual void finished_reading (const boost::system::error_code &ec)=0
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)=0
 Returns a reference to the HTTP message being parsed.

Detailed Description

reader: asynchronously reads and parses HTTP messages

Definition at line 28 of file reader.hpp.


Constructor & Destructor Documentation

pion::http::reader::reader ( const bool  is_request,
tcp::connection_ptr &  tcp_conn 
) [inline, protected]

protected constructor: only derived classes may create objects

Parameters:
is_request if true, the message is parsed as an HTTP request; if false, the message is parsed as an HTTP response
tcp_conn TCP connection containing a new message to parse

Definition at line 55 of file reader.hpp.


Member Function Documentation

void pion::http::reader::consume_bytes ( const boost::system::error_code &  read_error,
std::size_t  bytes_read 
) [protected]

Consumes bytes that have been read using an HTTP parser

Parameters:
read_error error status from the last read operation
bytes_read number of bytes consumed by the last read operation

Definition at line 41 of file http_reader.cpp.

References consume_bytes(), pion::http::parser::is_parsing_request(), pion::http::parser::m_logger, and pion::http::parser::set_read_buffer().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_hello_service_8cpp_source.html0000644000372000001440000001302012314121441023617 0ustar robertousers pion: services/HelloService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1connection.html0000644000372000001440000024546712314121441024233 0ustar robertousers pion: pion::tcp::connection Class Reference

pion::tcp::connection Class Reference

#include <connection.hpp>

List of all members.

Public Types

enum  lifecycle_type { LIFECYCLE_CLOSE, LIFECYCLE_KEEPALIVE, LIFECYCLE_PIPELINED }
 

data type for the connection's lifecycle state


enum  { READ_BUFFER_SIZE = 8192 }
 

size of the read buffer


typedef boost::function1< void,
boost::shared_ptr< connection > > 
connection_handler
 data type for a function that handles TCP connection objects
typedef boost::array< char,
READ_BUFFER_SIZE > 
read_buffer_type
 data type for an I/O read buffer
typedef
boost::asio::ip::tcp::socket 
socket_type
 data type for a socket connection
typedef
boost::asio::ssl::stream
< boost::asio::ip::tcp::socket > 
ssl_socket_type
 data type for an SSL socket connection
typedef boost::asio::ssl::context ssl_context_type
 data type for SSL configuration context

Public Member Functions

 connection (boost::asio::io_service &io_service, const bool ssl_flag=false)
 connection (boost::asio::io_service &io_service, ssl_context_type &ssl_context)
bool is_open (void) const
 returns true if the connection is currently open
void close (void)
 closes the tcp socket and cancels any pending asynchronous operations
void cancel (void)
virtual ~connection ()
 virtual destructor
template<typename AcceptHandler >
void async_accept (boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler)
boost::system::error_code accept (boost::asio::ip::tcp::acceptor &tcp_acceptor)
template<typename ConnectHandler >
void async_connect (const boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler)
template<typename ConnectHandler >
void async_connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler)
boost::system::error_code connect (boost::asio::ip::tcp::endpoint &tcp_endpoint)
boost::system::error_code connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port)
boost::system::error_code connect (const std::string &remote_server, const unsigned int remote_port)
template<typename SSLHandshakeHandler >
void async_handshake_client (SSLHandshakeHandler handler)
template<typename SSLHandshakeHandler >
void async_handshake_server (SSLHandshakeHandler handler)
boost::system::error_code handshake_client (void)
boost::system::error_code handshake_server (void)
template<typename ReadHandler >
void async_read_some (ReadHandler handler)
template<typename ReadBufferType , typename ReadHandler >
void async_read_some (ReadBufferType read_buffer, ReadHandler handler)
std::size_t read_some (boost::system::error_code &ec)
template<typename ReadBufferType >
std::size_t read_some (ReadBufferType read_buffer, boost::system::error_code &ec)
template<typename CompletionCondition , typename ReadHandler >
void async_read (CompletionCondition completion_condition, ReadHandler handler)
template<typename MutableBufferSequence , typename CompletionCondition , typename ReadHandler >
void async_read (const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler)
template<typename CompletionCondition >
std::size_t read (CompletionCondition completion_condition, boost::system::error_code &ec)
template<typename MutableBufferSequence , typename CompletionCondition >
std::size_t read (const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec)
template<typename ConstBufferSequence , typename write_handler_t >
void async_write (const ConstBufferSequence &buffers, write_handler_t handler)
template<typename ConstBufferSequence >
std::size_t write (const ConstBufferSequence &buffers, boost::system::error_code &ec)
void finish (void)
bool get_ssl_flag (void) const
 returns true if the connection is encrypted using SSL
void set_lifecycle (lifecycle_type t)
 sets the lifecycle type for the connection
lifecycle_type get_lifecycle (void) const
 returns the lifecycle type for the connection
bool get_keep_alive (void) const
 returns true if the connection should be kept alive
bool get_pipelined (void) const
 returns true if the HTTP requests are pipelined
read_buffer_typeget_read_buffer (void)
 returns the buffer used for reading data from the TCP connection
void save_read_pos (const char *read_ptr, const char *read_end_ptr)
void load_read_pos (const char *&read_ptr, const char *&read_end_ptr) const
boost::asio::ip::tcp::endpoint get_remote_endpoint (void) const
 returns an ASIO endpoint for the client connection
boost::asio::ip::address get_remote_ip (void) const
 returns the client's IP address
unsigned short get_remote_port (void) const
 returns the client's port number
boost::asio::io_service & get_io_service (void)
 returns reference to the io_service used for async operations
socket_typeget_socket (void)
 returns non-const reference to underlying TCP socket object
ssl_socket_typeget_ssl_socket (void)
 returns non-const reference to underlying SSL socket object
const socket_typeget_socket (void) const
 returns const reference to underlying TCP socket object
const ssl_socket_typeget_ssl_socket (void) const
 returns const reference to underlying SSL socket object

Static Public Member Functions

static boost::shared_ptr
< connection
create (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)

Protected Member Functions

 connection (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler)

Detailed Description

connection: represents a single tcp connection

Definition at line 40 of file connection.hpp.


Constructor & Destructor Documentation

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

creates a new connection object

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 109 of file connection.hpp.

References save_read_pos().

Referenced by create().

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context 
) [inline]

creates a new connection object for SSL

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 131 of file connection.hpp.

References save_read_pos().

pion::tcp::connection::connection ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context,
const bool  ssl_flag,
connection_handler  finished_handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection
ssl_flag if true then the connection will be encrypted using SSL
finished_handler function called when a server has finished handling the connection

Definition at line 689 of file connection.hpp.

References save_read_pos().


Member Function Documentation

boost::system::error_code pion::tcp::connection::accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor  )  [inline]

accepts a new tcp connection (blocks until established)

Parameters:
tcp_acceptor object used to accept new connections
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::accept()

Definition at line 209 of file connection.hpp.

Referenced by pion::tcp::stream::accept().

template<typename AcceptHandler >
void pion::tcp::connection::async_accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor,
AcceptHandler  handler 
) [inline]

asynchronously accepts a new tcp connection

Parameters:
tcp_acceptor object used to accept new connections
handler called after a new connection has been accepted
See also:
boost::asio::basic_socket_acceptor::async_accept()

Definition at line 195 of file connection.hpp.

template<typename ConnectHandler >
void pion::tcp::connection::async_connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port,
ConnectHandler  handler 
) [inline]

asynchronously connects to a (IPv4) remote endpoint

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
handler called after a new connection has been established
See also:
boost::asio::basic_socket_acceptor::async_connect()

Definition at line 241 of file connection.hpp.

References async_connect().

template<typename ConnectHandler >
void pion::tcp::connection::async_connect ( const boost::asio::ip::tcp::endpoint &  tcp_endpoint,
ConnectHandler  handler 
) [inline]

asynchronously connects to a remote endpoint

Parameters:
tcp_endpoint remote endpoint to connect to
handler called after a new connection has been established
See also:
boost::asio::basic_socket_acceptor::async_connect()

Definition at line 225 of file connection.hpp.

Referenced by async_connect().

template<typename SSLHandshakeHandler >
void pion::tcp::connection::async_handshake_client ( SSLHandshakeHandler  handler  )  [inline]

asynchronously performs client-side SSL handshake for a new connection

Parameters:
handler called after the ssl handshake has completed
See also:
boost::asio::ssl::stream::async_handshake()

Definition at line 324 of file connection.hpp.

template<typename SSLHandshakeHandler >
void pion::tcp::connection::async_handshake_server ( SSLHandshakeHandler  handler  )  [inline]

asynchronously performs server-side SSL handshake for a new connection

Parameters:
handler called after the ssl handshake has completed
See also:
boost::asio::ssl::stream::async_handshake()

Definition at line 339 of file connection.hpp.

template<typename MutableBufferSequence , typename CompletionCondition , typename ReadHandler >
void pion::tcp::connection::async_read ( const MutableBufferSequence &  buffers,
CompletionCondition  completion_condition,
ReadHandler  handler 
) [inline]

asynchronously reads data from the connection until completion_condition is met

Parameters:
buffers one or more buffers into which the data will be read
completion_condition determines if the read operation is complete
handler called after the read operation has completed
See also:
boost::asio::async_read()

Definition at line 488 of file connection.hpp.

References async_read(), and get_ssl_flag().

template<typename CompletionCondition , typename ReadHandler >
void pion::tcp::connection::async_read ( CompletionCondition  completion_condition,
ReadHandler  handler 
) [inline]

asynchronously reads data into the connection's read buffer until completion_condition is met

Parameters:
completion_condition determines if the read operation is complete
handler called after the read operation has completed
See also:
boost::asio::async_read()

Definition at line 464 of file connection.hpp.

References get_ssl_flag().

Referenced by async_read(), and read().

template<typename ReadBufferType , typename ReadHandler >
void pion::tcp::connection::async_read_some ( ReadBufferType  read_buffer,
ReadHandler  handler 
) [inline]

asynchronously reads some data into the connection's read buffer

Parameters:
read_buffer the buffer to read data into
handler called after the read operation has completed
See also:
boost::asio::basic_stream_socket::async_read_some()

Definition at line 406 of file connection.hpp.

References get_ssl_flag().

template<typename ReadHandler >
void pion::tcp::connection::async_read_some ( ReadHandler  handler  )  [inline]

asynchronously reads some data into the connection's read buffer

Parameters:
handler called after the read operation has completed
See also:
boost::asio::basic_stream_socket::async_read_some()

Definition at line 386 of file connection.hpp.

References get_ssl_flag().

template<typename ConstBufferSequence , typename write_handler_t >
void pion::tcp::connection::async_write ( const ConstBufferSequence &  buffers,
write_handler_t  handler 
) [inline]

asynchronously writes data to the connection

Parameters:
buffers one or more buffers containing the data to be written
handler called after the data has been written
See also:
boost::asio::async_write()

Definition at line 561 of file connection.hpp.

References get_ssl_flag().

void pion::tcp::connection::cancel ( void   )  [inline]

cancels any asynchronous operations pending on the socket. there is no good way to do this on windows until vista or later (0x0600) see http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_stream_socket/cancel/overload2.html note that the asio docs are misleading because close() is not thread-safe, and the suggested define statements cause WAY too much trouble and heartache

Definition at line 176 of file connection.hpp.

boost::system::error_code pion::tcp::connection::connect ( const std::string &  remote_server,
const unsigned int  remote_port 
) [inline]

connects to a remote endpoint with hostname lookup

Parameters:
remote_server hostname of the remote server to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 289 of file connection.hpp.

References close(), and connect().

boost::system::error_code pion::tcp::connection::connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port 
) [inline]

connects to a (IPv4) remote endpoint (blocks until established)

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 273 of file connection.hpp.

References connect().

boost::system::error_code pion::tcp::connection::connect ( boost::asio::ip::tcp::endpoint &  tcp_endpoint  )  [inline]

connects to a remote endpoint (blocks until established)

Parameters:
tcp_endpoint remote endpoint to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 257 of file connection.hpp.

Referenced by pion::tcp::stream::connect(), and connect().

static boost::shared_ptr<connection> pion::tcp::connection::create ( boost::asio::io_service &  io_service,
ssl_context_type ssl_context,
const bool  ssl_flag,
connection_handler  finished_handler 
) [inline, static]

creates new shared connection objects

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection
ssl_flag if true then the connection will be encrypted using SSL
finished_handler function called when a server has finished handling the connection

Definition at line 94 of file connection.hpp.

References connection().

boost::system::error_code pion::tcp::connection::handshake_client ( void   )  [inline]

performs client-side SSL handshake for a new connection (blocks until finished)

Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::ssl::stream::handshake()

Definition at line 353 of file connection.hpp.

Referenced by pion::tcp::stream::connect().

boost::system::error_code pion::tcp::connection::handshake_server ( void   )  [inline]

performs server-side SSL handshake for a new connection (blocks until finished)

Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::ssl::stream::handshake()

Definition at line 369 of file connection.hpp.

Referenced by pion::tcp::stream::accept().

void pion::tcp::connection::load_read_pos ( const char *&  read_ptr,
const char *&  read_end_ptr 
) const [inline]

loads a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 633 of file connection.hpp.

Referenced by pion::http::message::receive().

template<typename MutableBufferSequence , typename CompletionCondition >
std::size_t pion::tcp::connection::read ( const MutableBufferSequence &  buffers,
CompletionCondition  completion_condition,
boost::system::error_code &  ec 
) [inline]

reads data from the connection until completion_condition is met (blocks until finished)

Parameters:
buffers one or more buffers into which the data will be read
completion_condition determines if the read operation is complete
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::read()

Definition at line 538 of file connection.hpp.

References get_ssl_flag(), and read().

template<typename CompletionCondition >
std::size_t pion::tcp::connection::read ( CompletionCondition  completion_condition,
boost::system::error_code &  ec 
) [inline]

reads data into the connection's read buffer until completion_condition is met (blocks until finished)

Parameters:
completion_condition determines if the read operation is complete
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::read()

Definition at line 513 of file connection.hpp.

References async_read(), and get_ssl_flag().

Referenced by read().

template<typename ReadBufferType >
std::size_t pion::tcp::connection::read_some ( ReadBufferType  read_buffer,
boost::system::error_code &  ec 
) [inline]

reads some data into the connection's read buffer (blocks until finished)

Parameters:
read_buffer the buffer to read data into
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::basic_stream_socket::read_some()

Definition at line 443 of file connection.hpp.

References get_ssl_flag().

std::size_t pion::tcp::connection::read_some ( boost::system::error_code &  ec  )  [inline]

reads some data into the connection's read buffer (blocks until finished)

Parameters:
ec contains error code if the read fails
Returns:
std::size_t number of bytes read
See also:
boost::asio::basic_stream_socket::read_some()

Definition at line 424 of file connection.hpp.

References get_ssl_flag().

Referenced by pion::http::message::receive().

void pion::tcp::connection::save_read_pos ( const char *  read_ptr,
const char *  read_end_ptr 
) [inline]

saves a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 622 of file connection.hpp.

Referenced by connection(), and pion::http::message::receive().

template<typename ConstBufferSequence >
std::size_t pion::tcp::connection::write ( const ConstBufferSequence &  buffers,
boost::system::error_code &  ec 
) [inline]

writes data to the connection (blocks until finished)

Parameters:
buffers one or more buffers containing the data to be written
ec contains error code if the write fails
Returns:
std::size_t number of bytes written
See also:
boost::asio::write()

Definition at line 580 of file connection.hpp.

References get_ssl_flag().

Referenced by pion::http::message::send().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__writer_8cpp_source.html0000644000372000001440000002145412314121441023361 0ustar robertousers pion: src/http_writer.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1__http__protocol__info__t-members.html0000644000372000001440000000725012314121441031307 0ustar robertousers pion: Member List
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/scheduler_8hpp_source.html0000644000372000001440000007465412314121441022644 0ustar robertousers pion: include/pion/scheduler.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response__writer-members.html0000644000372000001440000002573612314121441027301 0ustar robertousers pion: Member List

pion::http::response_writer Member List

This is the complete list of members for pion::http::response_writer, including all inherited members.
bind_to_write_handler(void)pion::http::response_writer [inline, protected, virtual]
clear(void)pion::http::writer [inline]
create(tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t())pion::http::response_writer [inline, static]
create(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t())pion::http::response_writer [inline, static]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
get_response(void)pion::http::response_writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::http::response_writer [inline, protected, virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)pion::http::response_writer [inline, protected, virtual]
response_writer(tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler)pion::http::response_writer [inline, protected]
response_writer(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_writer [inline, protected]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~response_writer()pion::http::response_writer [inline, virtual]
~writer()pion::http::writer [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1exception.html0000644000372000001440000001316312314121441022705 0ustar robertousers pion: pion::exception Class Reference

pion::exception Class Reference

Inherits std::exception.

Inherited by pion::error::bad_arg, pion::error::bad_config, pion::error::bad_password_hash, pion::error::directory_not_found, pion::error::duplicate_plugin, pion::error::file_not_found, pion::error::open_file, pion::error::open_plugin, pion::error::plugin_missing_symbol, pion::error::plugin_not_found, pion::error::plugin_undefined, and pion::error::read_file.

List of all members.

Public Member Functions

 exception (const std::string &msg)
 exception (const char *const msg)
virtual const char * what () const throw ()

Protected Member Functions

void set_what_msg (const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const
virtual void update_what_msg () const

Protected Attributes

std::string m_what_msg

Detailed Description

Definition at line 34 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response__reader.html0000644000372000001440000003656612314121441025602 0ustar robertousers pion: pion::http::response_reader Class Reference

pion::http::response_reader Class Reference

#include <response_reader.hpp>

Inherits pion::http::reader.

List of all members.

Public Types

typedef boost::function3< void,
http::response_ptr,
tcp::connection_ptr, const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been parsed

Public Member Functions

void set_headers_parsed_callback (finished_handler_t &h)
 sets a function to be called after HTTP headers have been parsed

Static Public Member Functions

static boost::shared_ptr
< response_reader
create (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)

Protected Member Functions

 response_reader (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)
virtual void read_bytes (void)
 Reads more bytes from the TCP connection.
virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
virtual void finished_reading (const boost::system::error_code &ec)
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)
 Returns a reference to the HTTP message being parsed.

Protected Attributes

http::response_ptr m_http_msg
 The new HTTP message container being created.
finished_handler_t m_finished
 function called after the HTTP message has been parsed
finished_handler_t m_parsed_headers
 function called after the HTTP message headers have been parsed

Detailed Description

response_reader: asynchronously reads and parses HTTP responses

Definition at line 31 of file response_reader.hpp.


Constructor & Destructor Documentation

pion::http::response_reader::response_reader ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection containing a new message to parse
http_request the request we are responding to
handler function called after the message has been parsed

Definition at line 74 of file response_reader.hpp.

References m_http_msg, and pion::http::parser::set_logger().

Referenced by create().


Member Function Documentation

static boost::shared_ptr<response_reader> pion::http::response_reader::create ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, static]

creates new response_reader objects

Parameters:
tcp_conn TCP connection containing a new message to parse
http_request the request we are responding to
handler function called after the message has been parsed

Definition at line 54 of file response_reader.hpp.

References response_reader().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_allow_nothing_service.html0000644000372000001440000001231712314121441027474 0ustar robertousers pion: pion::plugins::AllowNothingService Class Reference

pion::plugins::AllowNothingService Class Reference

#include <AllowNothingService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)

Detailed Description

This class has a corresponding create function (pion_create_AllowNothingService) and destroy function (pion_destroy_AllowNothingService), as required for use by plugin.

Definition at line 23 of file AllowNothingService.hpp.


Member Function Documentation

void pion::plugins::AllowNothingService::operator() ( pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to handle a new HTTP request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Implements pion::http::plugin_service.

Definition at line 20 of file AllowNothingService.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1timer.html0000644000372000001440000001354612314121441023203 0ustar robertousers pion: pion::tcp::timer Class Reference

pion::tcp::timer Class Reference

#include <timer.hpp>

List of all members.

Public Member Functions

 timer (tcp::connection_ptr &conn_ptr)
void start (const boost::uint32_t seconds)
void cancel (void)
 cancel the timer (operation completed)

Detailed Description

timer: helper class used to time-out TCP connections

Definition at line 29 of file timer.hpp.


Constructor & Destructor Documentation

pion::tcp::timer::timer ( tcp::connection_ptr &  conn_ptr  ) 

creates a new TCP connection timer

Parameters:
conn_ptr pointer to TCP connection to monitor

Definition at line 20 of file tcp_timer.cpp.


Member Function Documentation

void pion::tcp::timer::start ( const boost::uint32_t  seconds  ) 

starts a timer for closing a TCP connection

Parameters:
seconds number of seconds before the timeout triggers

Definition at line 26 of file tcp_timer.cpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1parser-members.html0000644000372000001440000006405112314121441025175 0ustar robertousers pion: Member List

pion::http::parser Member List

This is the complete list of members for pion::http::parser, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_parsing_headers(const boost::system::error_code &ec)pion::http::parser [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x62.html0000644000372000001440000001150712314121441022135 0ustar robertousers pion: Class Members - Functions
 

- b -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_cookie_service_8hpp_source.html0000644000372000001440000001033512314121441024000 0ustar robertousers pion: services/CookieService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classes.html0000644000372000001440000003547512314121441020002 0ustar robertousers pion: Alphabetical List

Class Index

A | B | C | D | E | F | H | I | L | M | O | P | R | S | T | U | W | _
  A  
decompressor (pion::spdy)   
  L  
plugin_not_found (pion::error)   server (pion::http)   
admin_rights (pion)   directory_not_found (pion::error)   logger (pion)   plugin_ptr (pion)   server (pion::tcp)   
algorithm (pion)   DiskFile (pion::plugins)   LogService (pion::plugins)   plugin_server (pion::http)   one_to_one_scheduler::service_pair_type (pion)   
AllowNothingService (pion::plugins)   DiskFileSender (pion::plugins)   LogServiceAppender (pion::plugins)   plugin_service (pion::http)   single_service_scheduler (pion)   
auth (pion::http)   duplicate_plugin (pion::error)   
  M  
plugin_undefined (pion::error)   spdy_control_frame_info (pion::spdy)   
  B  
  E  
plugin_manager::map_type (pion)   process (pion)   stream (pion::tcp)   
bad_arg (pion::error)   EchoService (pion::plugins)   message (pion::http)   
  R  
stream_buffer (pion::tcp)   
bad_config (pion::error)   parser::error_category_t (pion::spdy)   multi_thread_scheduler (pion)   read_file (pion::error)   
  T  
bad_password_hash (pion::error)   parser::error_category_t (pion::http)   
  O  
reader (pion::http)   timer (pion::tcp)   
basic_auth (pion::http)   exception (pion)   one_to_one_scheduler (pion)   message::receive_error_t (pion::http)   types (pion::http)   
  C  
  F  
open_file (pion::error)   request (pion::http)   
  U  
config (pion::test)   file_not_found (pion::error)   open_plugin (pion::error)   request_reader (pion::http)   user (pion)   
process::config_type (pion)   FileService (pion::plugins)   
  P  
request_writer (pion::http)   user_manager (pion)   
connection (pion::tcp)   
  H  
parser (pion::spdy)   response (pion::http)   
  W  
message::content_buffer_t (pion::http)   HelloServer   parser (pion::http)   response_reader (pion::http)   writer (pion::http)   
cookie_auth (pion::http)   HelloService (pion::plugins)   plugin (pion)   response_writer (pion::http)   
  _  
CookieService (pion::plugins)   
  I  
plugin_instance_ptr (pion)   
  S  
_http_protocol_info_t (pion::spdy)   
  D  
iequal_to (pion)   plugin_manager (pion)   safe_xml_log_formatter (pion::test)   _spdy_header_info (pion::spdy)   
plugin::data_type (pion)   ihash (pion)   plugin_missing_symbol (pion::error)   scheduler (pion)   
A | B | C | D | E | F | H | I | L | M | O | P | R | S | T | U | W | _

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x65.html0000644000372000001440000001047012314121441022136 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__password__hash.html0000644000372000001440000000506112314121441026370 0ustar robertousers pion: pion::error::bad_password_hash Class Reference

pion::error::bad_password_hash Class Reference

exception thrown if a bad password hash is provided More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a bad password hash is provided

Definition at line 209 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/admin__rights_8cpp_source.html0000644000372000001440000003474112314121441023461 0ustar robertousers pion: src/admin_rights.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x69.html0000644000372000001440000001343012314121441021126 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- i -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__instance__ptr-members.html0000644000372000001440000001235012314121441026701 0ustar robertousers pion: Member List
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__config.html0000644000372000001440000000504312314121441024631 0ustar robertousers pion: pion::error::bad_config Class Reference

pion::error::bad_config Class Reference

exception thrown if there is an error parsing a configuration file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if there is an error parsing a configuration file

Definition at line 139 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1parser_1_1error__category__t.html0000644000372000001440000000627512314121441030001 0ustar robertousers pion: pion::http::parser::error_category_t Class Reference

pion::http::parser::error_category_t Class Reference

class-specific error category More...

#include <parser.hpp>

List of all members.

Public Member Functions

const char * name () const BOOST_SYSTEM_NOEXCEPT
std::string message (int ev) const

Detailed Description

class-specific error category

Definition at line 74 of file parser.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream.html0000644000372000001440000004755412314121441023364 0ustar robertousers pion: pion::tcp::stream Class Reference

pion::tcp::stream Class Reference

#include <stream.hpp>

Inherits std::basic_iostream< char, std::char_traits< char > >.

List of all members.

Public Types

typedef char char_type
typedef std::char_traits< char >
::int_type 
int_type
typedef std::char_traits< char >
::off_type 
off_type
typedef std::char_traits< char >
::pos_type 
pos_type
typedef std::char_traits< char > traits_type

Public Member Functions

 stream (tcp::connection_ptr &conn_ptr)
 stream (boost::asio::io_service &io_service, const bool ssl_flag=false)
 stream (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)
boost::system::error_code accept (boost::asio::ip::tcp::acceptor &tcp_acceptor)
boost::system::error_code connect (boost::asio::ip::tcp::endpoint &tcp_endpoint)
boost::system::error_code connect (const boost::asio::ip::address &remote_addr, const unsigned int remote_port)
void close (void)
 closes the tcp connection
bool is_open (void) const
 returns true if the connection is currently open
bool get_ssl_flag (void) const
 returns true if the connection is encrypted using SSL
boost::asio::ip::address get_remote_ip (void) const
 returns the client's IP address
stream_bufferrdbuf (void)
 returns a pointer to the stream buffer in use

Detailed Description

stream: std::basic_iostream wrapper for TCP network connections

Definition at line 323 of file stream.hpp.


Constructor & Destructor Documentation

pion::tcp::stream::stream ( tcp::connection_ptr &  conn_ptr  )  [inline, explicit]

constructs a TCP stream object for an existing TCP connection

Parameters:
conn_ptr pointer to the TCP connection to use for reading & writing

Definition at line 341 of file stream.hpp.

pion::tcp::stream::stream ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

constructs a TCP stream object for a new TCP connection

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 357 of file stream.hpp.

pion::tcp::stream::stream ( boost::asio::io_service &  io_service,
connection::ssl_context_type ssl_context 
) [inline]

constructs a TCP stream object for a new SSL/TCP connection

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 374 of file stream.hpp.


Member Function Documentation

boost::system::error_code pion::tcp::stream::accept ( boost::asio::ip::tcp::acceptor &  tcp_acceptor  )  [inline]

accepts a new tcp connection and performs SSL handshake if necessary

Parameters:
tcp_acceptor object used to accept new connections
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::accept()

Definition at line 393 of file stream.hpp.

References pion::tcp::connection::accept(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_server().

boost::system::error_code pion::tcp::stream::connect ( const boost::asio::ip::address &  remote_addr,
const unsigned int  remote_port 
) [inline]

connects to a (IPv4) remote endpoint and performs SSL handshake if necessary

Parameters:
remote_addr remote IP address (v4) to connect to
remote_port remote port number to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 424 of file stream.hpp.

References pion::tcp::connection::connect(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_client().

boost::system::error_code pion::tcp::stream::connect ( boost::asio::ip::tcp::endpoint &  tcp_endpoint  )  [inline]

connects to a remote endpoint and performs SSL handshake if necessary

Parameters:
tcp_endpoint remote endpoint to connect to
Returns:
boost::system::error_code contains error code if the connection fails
See also:
boost::asio::basic_socket_acceptor::connect()

Definition at line 408 of file stream.hpp.

References pion::tcp::connection::connect(), pion::tcp::stream_buffer::get_connection(), get_ssl_flag(), and pion::tcp::connection::handshake_client().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__reader_8cpp_source.html0000644000372000001440000005112012314121441023300 0ustar robertousers pion: src/http_reader.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__undefined-members.html0000644000372000001440000000664612314121441027537 0ustar robertousers pion: Member List

pion::error::plugin_undefined Member List

This is the complete list of members for pion::error::plugin_undefined, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_log_service_8cpp_source.html0000644000372000001440000004272012314121441023306 0ustar robertousers pion: services/LogService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/spdy_2types_8hpp_source.html0000644000372000001440000002271112314121440023135 0ustar robertousers pion: include/pion/spdy/types.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootpion-5.0.6+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type-members.htmlpion-5.0.6+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type-members.h0000644000372000001440000000520212314121441033246 0ustar robertousers pion: Member List

pion::one_to_one_scheduler::service_pair_type Member List

This is the complete list of members for pion::one_to_one_scheduler::service_pair_type, including all inherited members.
first (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type
second (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type
service_pair_type(void) (defined in pion::one_to_one_scheduler::service_pair_type)pion::one_to_one_scheduler::service_pair_type [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service.html0000644000372000001440000001326112314121441025410 0ustar robertousers pion: pion::plugins::LogService Class Reference

pion::plugins::LogService Class Reference

#include <LogService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles a new HTTP request
LogServiceAppendergetLogAppender (void)
 returns the log appender used by LogService

Detailed Description

LogService: web service that displays log messages

Definition at line 121 of file LogService.hpp.


Member Function Documentation

void pion::plugins::LogService::operator() ( pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn 
) [virtual]

The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/files.html0000644000372000001440000002656112314121441017443 0ustar robertousers pion: File Index

File List

Here is a list of all documented files with brief descriptions:
include/pion/admin_rights.hpp [code]
include/pion/algorithm.hpp [code]
include/pion/config.hpp [code]
include/pion/error.hpp [code]
include/pion/hash_map.hpp [code]
include/pion/logger.hpp [code]
include/pion/plugin.hpp [code]
include/pion/plugin_manager.hpp [code]
include/pion/process.hpp [code]
include/pion/scheduler.hpp [code]
include/pion/user.hpp [code]
include/pion/http/auth.hpp [code]
include/pion/http/basic_auth.hpp [code]
include/pion/http/cookie_auth.hpp [code]
include/pion/http/message.hpp [code]
include/pion/http/parser.hpp [code]
include/pion/http/plugin_server.hpp [code]
include/pion/http/plugin_service.hpp [code]
include/pion/http/reader.hpp [code]
include/pion/http/request.hpp [code]
include/pion/http/request_reader.hpp [code]
include/pion/http/request_writer.hpp [code]
include/pion/http/response.hpp [code]
include/pion/http/response_reader.hpp [code]
include/pion/http/response_writer.hpp [code]
include/pion/http/server.hpp [code]
include/pion/http/types.hpp [code]
include/pion/http/writer.hpp [code]
include/pion/spdy/decompressor.hpp [code]
include/pion/spdy/parser.hpp [code]
include/pion/spdy/types.hpp [code]
include/pion/tcp/connection.hpp [code]
include/pion/tcp/server.hpp [code]
include/pion/tcp/stream.hpp [code]
include/pion/tcp/timer.hpp [code]
include/pion/test/unit_test.hpp [code]
services/AllowNothingService.cpp [code]
services/AllowNothingService.hpp [code]
services/CookieService.cpp [code]
services/CookieService.hpp [code]
services/EchoService.cpp [code]
services/EchoService.hpp [code]
services/FileService.cpp [code]
services/FileService.hpp [code]
services/HelloService.cpp [code]
services/HelloService.hpp [code]
services/LogService.cpp [code]
services/LogService.hpp [code]
src/admin_rights.cpp [code]
src/algorithm.cpp [code]
src/http_auth.cpp [code]
src/http_basic_auth.cpp [code]
src/http_cookie_auth.cpp [code]
src/http_message.cpp [code]
src/http_parser.cpp [code]
src/http_plugin_server.cpp [code]
src/http_reader.cpp [code]
src/http_server.cpp [code]
src/http_types.cpp [code]
src/http_writer.cpp [code]
src/logger.cpp [code]
src/plugin.cpp [code]
src/process.cpp [code]
src/scheduler.cpp [code]
src/spdy_decompressor.cpp [code]
src/spdy_parser.cpp [code]
src/tcp_server.cpp [code]
src/tcp_timer.cpp [code]
utils/helloserver.cpp [code]
utils/piond.cpp [code]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1algorithm-members.html0000644000372000001440000004067312314121441024552 0ustar robertousers pion: Member List

pion::algorithm Member List

This is the complete list of members for pion::algorithm, including all inherited members.
base64_decode(std::string const &input, std::string &output)pion::algorithm [static]
base64_encode(std::string const &input, std::string &output)pion::algorithm [static]
float_from_bytes(long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)pion::algorithm [static]
float_to_bytes(long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)pion::algorithm [static]
from_double(Byte *ptr, const double n)pion::algorithm [inline, static]
from_float(Byte *ptr, const float n)pion::algorithm [inline, static]
from_int16(Byte *buf, const boost::int16_t n)pion::algorithm [inline, static]
from_int24(Byte *buf, const boost::int32_t n)pion::algorithm [inline, static]
from_int32(Byte *buf, const boost::int32_t n)pion::algorithm [inline, static]
from_int64(Byte *buf, const boost::int64_t n)pion::algorithm [inline, static]
from_int8(Byte *buf, const boost::int8_t n)pion::algorithm [inline, static]
from_long_double(Byte *ptr, const long double n)pion::algorithm [inline, static]
from_uint16(Byte *buf, const boost::uint16_t n)pion::algorithm [inline, static]
from_uint24(Byte *buf, const boost::uint32_t n)pion::algorithm [inline, static]
from_uint32(Byte *buf, const boost::uint32_t n)pion::algorithm [inline, static]
from_uint64(Byte *buf, const boost::uint64_t n)pion::algorithm [inline, static]
from_uint8(Byte *buf, const boost::uint8_t n)pion::algorithm [inline, static]
to_double(const Byte *ptr)pion::algorithm [inline, static]
to_float(const Byte *ptr)pion::algorithm [inline, static]
to_int16(unsigned char high, unsigned char low)pion::algorithm [inline, static]
to_int16(T1 high, T2 low)pion::algorithm [inline, static]
to_int16(const Byte *buf)pion::algorithm [inline, static]
to_int24(unsigned char high, unsigned char mid, unsigned char low)pion::algorithm [inline, static]
to_int24(T1 high, T2 mid, T3 low)pion::algorithm [inline, static]
to_int24(const Byte *buf)pion::algorithm [inline, static]
to_int32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)pion::algorithm [inline, static]
to_int32(T1 high, T2 mid1, T3 mid2, T4 low)pion::algorithm [inline, static]
to_int32(const Byte *buf)pion::algorithm [inline, static]
to_int64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)pion::algorithm [inline, static]
to_int64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)pion::algorithm [inline, static]
to_int64(const Byte *buf)pion::algorithm [inline, static]
to_int8(unsigned char byte)pion::algorithm [inline, static]
to_int8(char byte)pion::algorithm [inline, static]
to_int8(const Byte *buf)pion::algorithm [inline, static]
to_long_double(const Byte *ptr)pion::algorithm [inline, static]
to_uint16(unsigned char high, unsigned char low)pion::algorithm [inline, static]
to_uint16(T1 high, T2 low)pion::algorithm [inline, static]
to_uint16(const Byte *buf)pion::algorithm [inline, static]
to_uint24(unsigned char high, unsigned char mid, unsigned char low)pion::algorithm [inline, static]
to_uint24(T1 high, T2 mid, T3 low)pion::algorithm [inline, static]
to_uint24(const Byte *buf)pion::algorithm [inline, static]
to_uint32(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)pion::algorithm [inline, static]
to_uint32(T1 high, T2 mid1, T3 mid2, T4 low)pion::algorithm [inline, static]
to_uint32(const Byte *buf)pion::algorithm [inline, static]
to_uint64(unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)pion::algorithm [inline, static]
to_uint64(T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)pion::algorithm [inline, static]
to_uint64(const Byte *buf)pion::algorithm [inline, static]
to_uint8(unsigned char byte)pion::algorithm [inline, static]
to_uint8(char byte)pion::algorithm [inline, static]
to_uint8(const Byte *buf)pion::algorithm [inline, static]
url_decode(const std::string &str)pion::algorithm [static]
url_encode(const std::string &str)pion::algorithm [static]
xml_encode(const std::string &str)pion::algorithm [static]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6e.html0000644000372000001440000000741212314121441022220 0ustar robertousers pion: Class Members - Functions
 

- n -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/helloserver_8cpp_source.html0000644000372000001440000002002412314121441023171 0ustar robertousers pion: utils/helloserver.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/decompressor_8hpp_source.html0000644000372000001440000001604012314121441023354 0ustar robertousers pion: include/pion/spdy/decompressor.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/stream_8hpp_source.html0000644000372000001440000011721012314121441022143 0ustar robertousers pion: include/pion/tcp/stream.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x67.html0000644000372000001440000004371412314121441021134 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- g -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/response__reader_8hpp_source.html0000644000372000001440000003744212314121440024176 0ustar robertousers pion: include/pion/http/response_reader.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1ihash-members.html0000644000372000001440000000331412314121441023647 0ustar robertousers pion: Member List

pion::ihash Member List

This is the complete list of members for pion::ihash, including all inherited members.
operator()(std::string const &x) const (defined in pion::ihash)pion::ihash [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request__reader.html0000644000372000001440000003440412314121441025421 0ustar robertousers pion: pion::http::request_reader Class Reference

pion::http::request_reader Class Reference

#include <request_reader.hpp>

Inherits pion::http::reader.

List of all members.

Public Types

typedef boost::function3< void,
http::request_ptr,
tcp::connection_ptr, const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been parsed

Public Member Functions

void set_headers_parsed_callback (finished_handler_t &h)
 sets a function to be called after HTTP headers have been parsed

Static Public Member Functions

static boost::shared_ptr
< request_reader
create (tcp::connection_ptr &tcp_conn, finished_handler_t handler)

Protected Member Functions

 request_reader (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
virtual void read_bytes (void)
 Reads more bytes from the TCP connection.
virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
virtual void finished_reading (const boost::system::error_code &ec)
 Called after we have finished reading/parsing the HTTP message.
virtual http::messageget_message (void)
 Returns a reference to the HTTP message being parsed.

Protected Attributes

http::request_ptr m_http_msg
 The new HTTP message container being created.
finished_handler_t m_finished
 function called after the HTTP message has been parsed
finished_handler_t m_parsed_headers
 function called after the HTTP message headers have been parsed

Detailed Description

request_reader: asynchronously reads and parses HTTP requests

Definition at line 31 of file request_reader.hpp.


Constructor & Destructor Documentation

pion::http::request_reader::request_reader ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection containing a new message to parse
handler function called after the message has been parsed

Definition at line 71 of file request_reader.hpp.

References m_http_msg, and pion::http::parser::set_logger().

Referenced by create().


Member Function Documentation

static boost::shared_ptr<request_reader> pion::http::request_reader::create ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, static]

creates new request_reader objects

Parameters:
tcp_conn TCP connection containing a new message to parse
handler function called after the message has been parsed

Definition at line 53 of file request_reader.hpp.

References request_reader().

Referenced by pion::http::server::handle_connection().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x69.html0000644000372000001440000001336012314121441022143 0ustar robertousers pion: Class Members - Functions
 

- i -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1test_1_1safe__xml__log__formatter-members.html0000644000372000001440000001370612314121441031061 0ustar robertousers pion: Member List

pion::test::safe_xml_log_formatter Member List

This is the complete list of members for pion::test::safe_xml_log_formatter, including all inherited members.
log_build_info(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_finish(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_start(std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let)pion::test::safe_xml_log_formatter [inline, virtual]
log_entry_value(std::ostream &ostr, boost::unit_test::const_string value)pion::test::safe_xml_log_formatter [inline, virtual]
log_exception(std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex)pion::test::safe_xml_log_formatter [inline, virtual]
log_finish(std::ostream &ostr)pion::test::safe_xml_log_formatter [inline, virtual]
log_start(std::ostream &ostr, boost::unit_test::counter_t test_cases_amount)pion::test::safe_xml_log_formatter [inline, virtual]
safe_xml_log_formatter()pion::test::safe_xml_log_formatter [inline]
test_unit_finish(std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed)pion::test::safe_xml_log_formatter [inline, virtual]
test_unit_skipped(std::ostream &ostr, boost::unit_test::test_unit const &tu)pion::test::safe_xml_log_formatter [inline, virtual]
test_unit_start(std::ostream &ostr, boost::unit_test::test_unit const &tu)pion::test::safe_xml_log_formatter [inline, virtual]
~safe_xml_log_formatter()pion::test::safe_xml_log_formatter [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x64.html0000644000372000001440000001406312314121441021124 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- d -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6f.html0000644000372000001440000001372512314121441022225 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/hierarchy.html0000644000372000001440000002167012314121441020313 0ustar robertousers pion: Hierarchical Index

Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream-members.html0000644000372000001440000001340512314121441025000 0ustar robertousers pion: Member List

pion::tcp::stream Member List

This is the complete list of members for pion::tcp::stream, including all inherited members.
accept(boost::asio::ip::tcp::acceptor &tcp_acceptor)pion::tcp::stream [inline]
char_type typedef (defined in pion::tcp::stream)pion::tcp::stream
close(void)pion::tcp::stream [inline]
connect(boost::asio::ip::tcp::endpoint &tcp_endpoint)pion::tcp::stream [inline]
connect(const boost::asio::ip::address &remote_addr, const unsigned int remote_port)pion::tcp::stream [inline]
get_remote_ip(void) const pion::tcp::stream [inline]
get_ssl_flag(void) const pion::tcp::stream [inline]
int_type typedef (defined in pion::tcp::stream)pion::tcp::stream
is_open(void) const pion::tcp::stream [inline]
off_type typedef (defined in pion::tcp::stream)pion::tcp::stream
pos_type typedef (defined in pion::tcp::stream)pion::tcp::stream
rdbuf(void)pion::tcp::stream [inline]
stream(tcp::connection_ptr &conn_ptr)pion::tcp::stream [inline, explicit]
stream(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::stream [inline, explicit]
stream(boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)pion::tcp::stream [inline]
traits_type typedef (defined in pion::tcp::stream)pion::tcp::stream

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x77.html0000644000372000001440000001173212314121441021130 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- w -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x70.html0000644000372000001440000002204712314121441022135 0ustar robertousers pion: Class Members - Functions
 

- p -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1message-members.html0000644000372000001440000012054312314121441025324 0ustar robertousers pion: Member List

pion::http::message Member List

This is the complete list of members for pion::http::message, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
append_cookie_headers(void)pion::http::message [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::message [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &key)pion::http::message [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_remote_ip(void)pion::http::message [inline]
get_status() const pion::http::message [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const =0pion::http::message [pure virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &content)pion::http::message [inline]
set_content_length(size_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const =0pion::http::message [protected, pure virtual]
update_transfer_encoding_using_header(void)pion::http::message [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser-members.html0000644000372000001440000002410512314121441025171 0ustar robertousers pion: Member List

pion::spdy::parser Member List

This is the complete list of members for pion::spdy::parser, including all inherited members.
create_error_category(void)pion::spdy::parser [protected, static]
ERROR_DECOMPRESSION enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INTERNAL_SPDY_ERROR enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INVALID_SPDY_FRAME enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_INVALID_SPDY_VERSION enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::spdy::parser)pion::spdy::parser
ERROR_PROTOCOL_ERROR enum value (defined in pion::spdy::parser)pion::spdy::parser
error_value_t enum namepion::spdy::parser
get_control_frame_stream_id(const char *ptr)pion::spdy::parser [static]
get_error_category(void)pion::spdy::parser [inline, protected, static]
get_spdy_data_content()pion::spdy::parser [inline]
get_spdy_frame_type(const char *ptr)pion::spdy::parser [static]
get_spdy_read_pointer()pion::spdy::parser [inline]
is_spdy_control_frame(const char *ptr)pion::spdy::parser [static]
parse(http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)pion::spdy::parser
parse_header_payload(boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count)pion::spdy::parser [protected]
parse_spdy_data(boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info)pion::spdy::parser [protected]
parse_spdy_frame(boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)pion::spdy::parser [protected]
parse_spdy_goaway_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_ping_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_rst_stream(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_settings_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parse_spdy_window_update_frame(boost::system::error_code &ec, const spdy_control_frame_info &frame)pion::spdy::parser [protected]
parser()pion::spdy::parser
populate_frame(boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers)pion::spdy::parser [protected]
set_error(boost::system::error_code &ec, error_value_t ev)pion::spdy::parser [inline, protected, static]
set_read_ptr(const char *ptr)pion::spdy::parser [inline, protected]
~parser()pion::spdy::parser [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x77.html0000644000372000001440000001123212314121441022136 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1user__manager-members.html0000644000372000001440000001227512314121441025151 0ustar robertousers pion: Member List

pion::user_manager Member List

This is the complete list of members for pion::user_manager, including all inherited members.
add_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
add_user_hash(const std::string &username, const std::string &password_hash)pion::user_manager [inline, virtual]
empty(void) const pion::user_manager [inline]
get_user(const std::string &username)pion::user_manager [inline, virtual]
get_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
m_mutexpion::user_manager [mutable, protected]
m_userspion::user_manager [protected]
remove_user(const std::string &username)pion::user_manager [inline, virtual]
update_user(const std::string &username, const std::string &password)pion::user_manager [inline, virtual]
update_user_hash(const std::string &username, const std::string &password_hash)pion::user_manager [inline, virtual]
user_manager(void)pion::user_manager [inline]
user_map_t typedefpion::user_manager [protected]
~user_manager()pion::user_manager [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/algorithm_8cpp_source.html0000644000372000001440000011633712314121441022642 0ustar robertousers pion: src/algorithm.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_hello_service_8hpp_source.html0000644000372000001440000001031412314121441023627 0ustar robertousers pion: services/HelloService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1duplicate__plugin.html0000644000372000001440000000523712314121441026113 0ustar robertousers pion: pion::error::duplicate_plugin Class Reference

pion::error::duplicate_plugin Class Reference

exception thrown if we try to add or load a duplicate plugin More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we try to add or load a duplicate plugin

Definition at line 188 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__server-members.html0000644000372000001440000004400612314121441026722 0ustar robertousers pion: Member List

pion::http::plugin_server Member List

This is the complete list of members for pion::http::plugin_server, including all inherited members.
add_redirect(const std::string &requested_resource, const std::string &new_resource)pion::http::server
add_resource(const std::string &resource, request_handler_t request_handler)pion::http::server
add_service(const std::string &resource, http::plugin_service *service_ptr)pion::http::plugin_server
after_stopping(void)pion::http::plugin_server [inline, protected, virtual]
before_starting(void)pion::http::plugin_server [inline, protected, virtual]
clear(void)pion::http::plugin_server [inline, virtual]
error_handler_t typedefpion::http::server
find_request_handler(const std::string &resource, request_handler_t &request_handler) const pion::http::server [protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_bad_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_connection(tcp::connection_ptr &tcp_conn)pion::http::server [protected, virtual]
handle_forbidden_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
handle_method_not_allowed(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")pion::http::server [static]
handle_not_found_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)pion::http::server [protected, virtual]
handle_server_error(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
load_service(const std::string &resource, const std::string &service_name)pion::http::plugin_server
load_service_config(const std::string &config_name)pion::http::plugin_server
m_loggerpion::tcp::server [protected]
plugin_server(const unsigned int tcp_port=0)pion::http::plugin_server [inline, explicit]
plugin_server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::plugin_server [inline, explicit]
plugin_server(scheduler &sched, const unsigned int tcp_port=0)pion::http::plugin_server [inline, explicit]
plugin_server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::plugin_server [inline]
remove_resource(const std::string &resource)pion::http::server
request_handler_t typedefpion::http::server
server(const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline, explicit]
server(scheduler &sched, const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_authentication(http::auth_ptr auth)pion::http::server [inline]
set_bad_request_handler(request_handler_t h)pion::http::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_error_handler(error_handler_t h)pion::http::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_max_content_length(std::size_t n)pion::http::server [inline]
set_not_found_handler(request_handler_t h)pion::http::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_service_option(const std::string &resource, const std::string &name, const std::string &value)pion::http::plugin_server
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
strip_trailing_slash(const std::string &str)pion::http::server [inline, static]
~plugin_server()pion::http::plugin_server [inline, virtual]
~server()pion::http::server [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1algorithm.html0000644000372000001440000014242112314121441023114 0ustar robertousers pion: pion::algorithm Struct Reference

pion::algorithm Struct Reference

List of all members.

Static Public Member Functions

static bool base64_decode (std::string const &input, std::string &output)
static bool base64_encode (std::string const &input, std::string &output)
static std::string url_decode (const std::string &str)
 escapes URL-encoded strings (a20value+with20spaces)
static std::string url_encode (const std::string &str)
 encodes strings so that they are safe for URLs (with20spaces)
static std::string xml_encode (const std::string &str)
 TODO: escapes XML/HTML-encoded strings (1 < 2).
static void float_from_bytes (long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)
static void float_to_bytes (long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits)
static boost::uint8_t to_uint8 (unsigned char byte)
 convert sequence of one byte to 8-bit unsigned integer
static boost::int8_t to_int8 (unsigned char byte)
 convert sequence of one byte to 8-bit signed integer
static boost::uint8_t to_uint8 (char byte)
 convert sequence of one byte to 8-bit unsigned integer
static boost::int8_t to_int8 (char byte)
 convert sequence of one byte to 8-bit signed integer
static boost::uint16_t to_uint16 (unsigned char high, unsigned char low)
 convert sequence of two bytes to 16-bit unsigned integer
static boost::int16_t to_int16 (unsigned char high, unsigned char low)
 convert sequence of two bytes to 16-bit signed integer
static boost::uint32_t to_uint24 (unsigned char high, unsigned char mid, unsigned char low)
 convert sequence of three bytes to 24-bit unsigned integer
static boost::int32_t to_int24 (unsigned char high, unsigned char mid, unsigned char low)
 convert sequence of three bytes to 24-bit signed integer
static boost::uint32_t to_uint32 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)
 convert sequence of four bytes to 32-bit unsigned integer
static boost::int32_t to_int32 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low)
 convert sequence of four bytes to 32-bit signed integer
static boost::uint64_t to_uint64 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)
 convert sequence of eight bytes to 64-bit unsigned integer
static boost::int64_t to_int64 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low)
 convert sequence of eight bytes to 64-bit signed integer
template<typename T1 , typename T2 >
static boost::uint16_t to_uint16 (T1 high, T2 low)
 convert sequence of two bytes to 16-bit unsigned integer
template<typename T1 , typename T2 >
static boost::int16_t to_int16 (T1 high, T2 low)
 convert sequence of two bytes to 16-bit signed integer
template<typename T1 , typename T2 , typename T3 >
static boost::uint32_t to_uint24 (T1 high, T2 mid, T3 low)
 convert sequence of three bytes to 24-bit unsigned integer
template<typename T1 , typename T2 , typename T3 >
static boost::int32_t to_int24 (T1 high, T2 mid, T3 low)
 convert sequence of three bytes to 24-bit signed integer
template<typename T1 , typename T2 , typename T3 , typename T4 >
static boost::uint32_t to_uint32 (T1 high, T2 mid1, T3 mid2, T4 low)
 convert sequence of four bytes to 32-bit unsigned integer
template<typename T1 , typename T2 , typename T3 , typename T4 >
static boost::int32_t to_int32 (T1 high, T2 mid1, T3 mid2, T4 low)
 convert sequence of four bytes to 32-bit signed integer
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
static boost::uint64_t to_uint64 (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)
 convert sequence of eight bytes to 64-bit unsigned integer
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
static boost::int64_t to_int64 (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low)
 convert sequence of eight bytes to 64-bit signed integer
template<typename Byte >
static boost::uint8_t to_uint8 (const Byte *buf)
 convert byte pointer into an 8-bit unsigned integer
template<typename Byte >
static boost::int8_t to_int8 (const Byte *buf)
 convert byte pointer into an 8-bit signed integer
template<typename Byte >
static boost::uint16_t to_uint16 (const Byte *buf)
 convert sequence of two bytes to 16-bit unsigned integer
template<typename Byte >
static boost::int16_t to_int16 (const Byte *buf)
 convert sequence of two bytes to 16-bit signed integer
template<typename Byte >
static boost::uint32_t to_uint24 (const Byte *buf)
 convert sequence of three bytes to 24-bit unsigned integer
template<typename Byte >
static boost::int32_t to_int24 (const Byte *buf)
 convert sequence of three bytes to 24-bit signed integer
template<typename Byte >
static boost::uint32_t to_uint32 (const Byte *buf)
 convert sequence of four bytes to 32-bit unsigned integer
template<typename Byte >
static boost::int32_t to_int32 (const Byte *buf)
 convert sequence of four bytes to 32-bit signed integer
template<typename Byte >
static boost::uint64_t to_uint64 (const Byte *buf)
 convert sequence of eight bytes to 64-bit unsigned integer
template<typename Byte >
static boost::int64_t to_int64 (const Byte *buf)
 convert sequence of eight bytes to 64-bit signed integer
template<typename Byte >
static void from_uint8 (Byte *buf, const boost::uint8_t n)
 convert 8-bit unsigned integer into sequence of one byte
template<typename Byte >
static void from_int8 (Byte *buf, const boost::int8_t n)
 convert 8-bit signed integer into sequence of one byte
template<typename Byte >
static void from_uint16 (Byte *buf, const boost::uint16_t n)
 convert 16-bit unsigned integer into sequence of two bytes
template<typename Byte >
static void from_int16 (Byte *buf, const boost::int16_t n)
 convert 16-bit signed integer into sequence of two bytes
template<typename Byte >
static void from_uint24 (Byte *buf, const boost::uint32_t n)
 convert 24-bit unsigned integer into sequence of three bytes
template<typename Byte >
static void from_int24 (Byte *buf, const boost::int32_t n)
 convert 24-bit signed integer into sequence of three bytes
template<typename Byte >
static void from_uint32 (Byte *buf, const boost::uint32_t n)
 convert 32-bit unsigned integer into sequence of four bytes
template<typename Byte >
static void from_int32 (Byte *buf, const boost::int32_t n)
 convert 32-bit signed integer into sequence of four bytes
template<typename Byte >
static void from_uint64 (Byte *buf, const boost::uint64_t n)
 convert 64-bit unsigned integer into sequence of eight bytes
template<typename Byte >
static void from_int64 (Byte *buf, const boost::int64_t n)
 convert 64-bit signed integer into sequence of eight bytes
template<typename Byte >
static float to_float (const Byte *ptr)
template<typename Byte >
static double to_double (const Byte *ptr)
template<typename Byte >
static long double to_long_double (const Byte *ptr)
template<typename Byte >
static void from_float (Byte *ptr, const float n)
template<typename Byte >
static void from_double (Byte *ptr, const double n)
template<typename Byte >
static void from_long_double (Byte *ptr, const long double n)

Detailed Description

Definition at line 19 of file algorithm.hpp.


Member Function Documentation

bool pion::algorithm::base64_decode ( std::string const &  input,
std::string &  output 
) [static]

base64 decoding

Parameters:
input - base64 encoded string
output - decoded string ( may include non-text chars)
Returns:
true if successful, false if input string contains non-base64 symbols

Definition at line 24 of file algorithm.cpp.

Referenced by pion::http::basic_auth::parse_credentials().

bool pion::algorithm::base64_encode ( std::string const &  input,
std::string &  output 
) [static]

base64 encoding

Parameters:
input - arbitrary string ( may include non-text chars)
output - base64 encoded string
Returns:
true if successful,

Definition at line 104 of file algorithm.cpp.

Referenced by pion::http::cookie_auth::process_login().

void pion::algorithm::float_from_bytes ( long double &  value,
const unsigned char *  ptr,
size_t  num_exp_bits,
size_t  num_fraction_bits 
) [static]

convert sequence of bytes in IEEE 754 format into a native floating point data type reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 309 of file algorithm.cpp.

void pion::algorithm::float_to_bytes ( long double  value,
unsigned char *  ptr,
size_t  num_exp_bits,
size_t  num_fraction_bits 
) [static]

convert native floating point type into a sequence of bytes in IEEE 754 format reference: http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 340 of file algorithm.cpp.

template<typename Byte >
static void pion::algorithm::from_double ( Byte *  ptr,
const double  n 
) [inline, static]

convert double into sequence of eight bytes in "double precision" binary64 format http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Definition at line 375 of file algorithm.hpp.

template<typename Byte >
static void pion::algorithm::from_float ( Byte *  ptr,
const float  n 
) [inline, static]

convert float into sequence of four bytes in "single precision" binary32 format http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 368 of file algorithm.hpp.

template<typename Byte >
static void pion::algorithm::from_long_double ( Byte *  ptr,
const long double  n 
) [inline, static]

convert long double into sequence of sixteen bytes in 128-bit "quadruple precision" format http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format

Definition at line 382 of file algorithm.hpp.

template<typename Byte >
static double pion::algorithm::to_double ( const Byte *  ptr  )  [inline, static]

convert sequence of eight bytes in 64-bit "double precision" binary64 format into a double http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Definition at line 350 of file algorithm.hpp.

template<typename Byte >
static float pion::algorithm::to_float ( const Byte *  ptr  )  [inline, static]

convert sequence of four bytes in 32-bit "single precision" binary32 format into a float http://en.wikipedia.org/wiki/Single_precision_floating-point_format

Definition at line 341 of file algorithm.hpp.

template<typename Byte >
static long double pion::algorithm::to_long_double ( const Byte *  ptr  )  [inline, static]

convert sequence of sixteen bytes in 128-bit "quadruple precision" format into a long double http://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format

Definition at line 359 of file algorithm.hpp.

std::string pion::algorithm::xml_encode ( const std::string &  str  )  [static]

TODO: escapes XML/HTML-encoded strings (1 < 2).

encodes strings so that they are safe for XML/HTML (2 > 1)

Definition at line 225 of file algorithm.cpp.

Referenced by pion::http::server::handle_forbidden_request(), pion::http::server::handle_method_not_allowed(), pion::http::server::handle_not_found_request(), pion::http::server::handle_server_error(), and pion::plugins::FileService::operator()().


The documentation for this struct was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request__reader-members.html0000644000372000001440000007660112314121441027056 0ustar robertousers pion: Member List

pion::http::request_reader Member List

This is the complete list of members for pion::http::request_reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_reader [inline, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_handler_t typedefpion::http::request_reader
finished_parsing_headers(const boost::system::error_code &ec)pion::http::request_reader [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)pion::http::request_reader [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)pion::http::request_reader [inline, protected, virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_finishedpion::http::request_reader [protected]
m_http_msgpion::http::request_reader [protected]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_parsed_headerspion::http::request_reader [protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)pion::http::request_reader [inline, protected, virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
request_reader(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_reader [inline, protected]
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_headers_parsed_callback(finished_handler_t &h)pion::http::request_reader [inline]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]
~request_reader() (defined in pion::http::request_reader)pion::http::request_reader [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1timer-members.html0000644000372000001440000000426612314121441024632 0ustar robertousers pion: Member List

pion::tcp::timer Member List

This is the complete list of members for pion::tcp::timer, including all inherited members.
cancel(void)pion::tcp::timer
start(const boost::uint32_t seconds)pion::tcp::timer
timer(tcp::connection_ptr &conn_ptr)pion::tcp::timer

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func.html0000644000372000001440000002055512314121441021361 0ustar robertousers pion: Class Members - Functions
 

- a -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/class_hello_server.html0000644000372000001440000000575312314121441022217 0ustar robertousers pion: HelloServer Class Reference

HelloServer Class Reference

simple TCP server that just sends "Hello there!" to each connection More...

Inherits pion::tcp::server.

List of all members.

Public Member Functions

 HelloServer (const unsigned int tcp_port)
virtual void handle_connection (tcp::connection_ptr &tcp_conn)

Detailed Description

simple TCP server that just sends "Hello there!" to each connection

Definition at line 22 of file helloserver.cpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6f.html0000644000372000001440000001377512314121441021217 0ustar robertousers pion: Class Members
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1plugin_1_1data__type-members.html0000644000372000001440000000716112314121441026547 0ustar robertousers pion: Member List

pion::plugin::data_type Member List

This is the complete list of members for pion::plugin::data_type, including all inherited members.
data_type(void)pion::plugin::data_type [inline]
data_type(const std::string &plugin_name) (defined in pion::plugin::data_type)pion::plugin::data_type [inline]
data_type(const data_type &p) (defined in pion::plugin::data_type)pion::plugin::data_type [inline]
m_create_funcpion::plugin::data_type
m_destroy_funcpion::plugin::data_type
m_lib_handlepion::plugin::data_type
m_plugin_namepion::plugin::data_type
m_referencespion::plugin::data_type

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1decompressor.html0000644000372000001440000002423112314121441024752 0ustar robertousers pion: pion::spdy::decompressor Class Reference

pion::spdy::decompressor Class Reference

#include <decompressor.hpp>

List of all members.

Public Types

enum  data_size_t { MAX_UNCOMPRESSED_DATA_BUF_SIZE = 16384 }
 

data size constants

More...

Public Member Functions

 decompressor ()
 constructs a new decompressor object (default constructor)
 ~decompressor ()
 destructor
char * decompress (const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length)

Protected Member Functions

bool spdy_decompress_header (const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length)

Detailed Description

SPDYDecompressor : Decompresses SPDY frames

Definition at line 29 of file decompressor.hpp.


Member Enumeration Documentation

data size constants

Enumerator:
MAX_UNCOMPRESSED_DATA_BUF_SIZE 

maximum size of an uncompressed spdy header

Definition at line 34 of file decompressor.hpp.


Member Function Documentation

char * pion::spdy::decompressor::decompress ( const char *  compressed_data_ptr,
boost::uint32_t  stream_id,
const spdy_control_frame_info frame,
boost::uint32_t  header_block_length 
)

decompresses the http content

Returns:
the uncompressed string, or null on failure

Get our decompressor.

Definition at line 89 of file spdy_decompressor.cpp.

References spdy_decompress_header().

bool pion::spdy::decompressor::spdy_decompress_header ( const char *  compressed_data_ptr,
z_streamp  decomp,
boost::uint32_t  length,
boost::uint32_t &  uncomp_length 
) [protected]

decompresses the spdy header

Returns:
true if successful

Definition at line 131 of file spdy_decompressor.cpp.

References MAX_UNCOMPRESSED_DATA_BUF_SIZE.

Referenced by decompress().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x66.html0000644000372000001440000002075212314121441022143 0ustar robertousers pion: Class Members - Functions
 

- f -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_echo_service.html0000644000372000001440000000663312314121441025552 0ustar robertousers pion: pion::plugins::EchoService Class Reference

pion::plugins::EchoService Class Reference

#include <EchoService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for EchoService

Detailed Description

EchoService: web service that echos back requests (to test request parsing)

Definition at line 22 of file EchoService.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin.html0000644000372000001440000005761012314121441022212 0ustar robertousers pion: pion::plugin Class Reference

pion::plugin Class Reference

#include <plugin.hpp>

Inherited by pion::plugin_ptr< InterfaceClassType >.

List of all members.

Classes

struct  config_type
 data type for static/global plugin configuration information
struct  data_type

Public Member Functions

bool is_open (void) const
 returns true if a shared library is loaded/open
std::string get_plugin_name (void) const
 returns the name of the plugin that is currently open
void open (const std::string &plugin_name)
void open_file (const std::string &plugin_file)
void close (void)
 closes plug-in library

Static Public Member Functions

static bool find_plugin_file (std::string &path_to_file, const std::string &name)
static bool find_config_file (std::string &path_to_file, const std::string &name)
static void add_static_entry_point (const std::string &plugin_name, void *create_func, void *destroy_func)
static void check_cygwin_path (boost::filesystem::path &final_path, const std::string &path_string)
static void add_plugin_directory (const std::string &dir)
 appends a directory to the plug-in search path
static void reset_plugin_directories (void)
 clears all directories from the plug-in search path
static void get_all_plugin_names (std::vector< std::string > &plugin_names)
 returns a list of all Plugins found in all Plugin directories

Protected Member Functions

 plugin (void)
 default constructor is private (use plugin_ptr class to create objects)
 plugin (const plugin &p)
 copy constructor
pluginoperator= (const plugin &p)
 assignment operator
void * get_create_function (void)
 returns a pointer to the plug-in's "create object" function
void * get_destroy_function (void)
 returns a pointer to the plug-in's "destroy object" function
void release_data (void)
 releases the plug-in's shared library symbols
void grab_data (const plugin &p)
 grabs a reference to another plug-in's shared library symbols

Detailed Description

plugin: base class for plug-in management

Definition at line 30 of file plugin.hpp.


Member Function Documentation

void pion::plugin::add_static_entry_point ( const std::string &  plugin_name,
void *  create_func,
void *  destroy_func 
) [static]

adds an entry point for a plugin that is statically linked NOTE: USE PION_DECLARE_PLUGIN() macro instead!!!

Parameters:
plugin_name the name of the plugin to add
create_func - pointer to the function to be used in to create plugin object
destroy_func - pointer to the function to be used to release plugin object

Definition at line 390 of file plugin.cpp.

References pion::plugin::data_type::m_create_func, pion::plugin::data_type::m_destroy_func, and pion::plugin::data_type::m_lib_handle.

void pion::plugin::check_cygwin_path ( boost::filesystem::path &  final_path,
const std::string &  path_string 
) [static]

updates path for cygwin oddities, if necessary

Parameters:
final_path path object for the file, will be modified if necessary
start_path original path to the file. if final_path is not valid, this will be appended to PION_CYGWIN_DIRECTORY to attempt attempt correction of final_path for cygwin

Definition at line 48 of file plugin.cpp.

Referenced by add_plugin_directory(), and pion::plugins::FileService::set_option().

static bool pion::plugin::find_config_file ( std::string &  path_to_file,
const std::string &  name 
) [inline, static]

searches directories for a valid plug-in configuration file

Parameters:
path_to_file if found, is set to the complete path to the file
name the name of the configuration file to search for
Returns:
true if the configuration file was found

Definition at line 53 of file plugin.hpp.

Referenced by pion::http::plugin_server::load_service_config().

static bool pion::plugin::find_plugin_file ( std::string &  path_to_file,
const std::string &  name 
) [inline, static]

searches directories for a valid plug-in file

Parameters:
path_to_file the path to the plug-in file, if found
the name name of the plug-in to search for
Returns:
true if the plug-in file was found

Definition at line 40 of file plugin.hpp.

Referenced by open().

void pion::plugin::open ( const std::string &  plugin_name  ) 

opens plug-in library within a shared object file. If the library is already being used by another plugin object, then the existing code will be re-used and the reference count will be increased. Beware that this does NOT check the plug-in's base class (InterfaceClassType), so you must be careful to ensure that the namespace is unique between plug-ins that have different base classes. If the plug-in's name matches an existing plug-in of a different base class, the resulting behavior is undefined (it will probably crash your program).

Parameters:
plugin_name name of the plug-in library to open (without extension, etc.)

Definition at line 82 of file plugin.cpp.

References find_plugin_file(), pion::plugin::data_type::m_references, open_file(), and release_data().

Referenced by pion::plugin_manager< PluginType >::load().

void pion::plugin::open_file ( const std::string &  plugin_file  ) 

opens plug-in library within a shared object file. If the library is already being used by another plugin object, then the existing code will be re-used and the reference count will be increased. Beware that this does NOT check the plug-in's base class (InterfaceClassType), so you must be careful to ensure that the namespace is unique between plug-ins that have different base classes. If the plug-in's name matches an existing plug-in of a different base class, the resulting behavior is undefined (it will probably crash your program).

Parameters:
plugin_file shared object file containing the plugin code

Definition at line 106 of file plugin.cpp.

References get_plugin_name(), pion::plugin::data_type::m_plugin_name, pion::plugin::data_type::m_references, and release_data().

Referenced by open().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/scheduler_8cpp_source.html0000644000372000001440000006416412314121441022632 0ustar robertousers pion: src/scheduler.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service_appender.html0000644000372000001440000001065012314121441027265 0ustar robertousers pion: pion::plugins::LogServiceAppender Class Reference

pion::plugins::LogServiceAppender Class Reference

#include <LogService.hpp>

List of all members.

Public Member Functions

void setMaxEvents (unsigned int n)
 sets the maximum number of log events cached in memory
void addLogString (const std::string &log_string)
 adds a formatted log message to the memory cache
void writeLogEvents (pion::http::response_writer_ptr &writer)
 writes the events cached in memory to a response stream

Detailed Description

LogServiceAppender: caches log events in memory for use by LogService

Definition at line 43 of file LogService.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_file_service_8hpp_source.html0000644000372000001440000011072512314121441023452 0ustar robertousers pion: services/FileService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6a.html0000644000372000001440000000754612314121441022224 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1__spdy__header__info.html0000644000372000001440000000736212314121441026570 0ustar robertousers pion: pion::spdy::_spdy_header_info Struct Reference

pion::spdy::_spdy_header_info Struct Reference

#include <types.hpp>

List of all members.

Public Attributes

boost::uint32_t stream_id
boost::uint8_t * header_block
boost::uint8_t header_block_len
boost::uint16_t frame_type

Detailed Description

This structure will be tied to each SPDY header frame. Only applies to frames containing headers: SYN_STREAM, SYN_REPLY, HEADERS Note that there may be multiple SPDY frames in one packet.

Definition at line 60 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1test_1_1config.html0000644000372000001440000000610712314121441023733 0ustar robertousers pion: pion::test::config Struct Reference

pion::test::config Struct Reference

#include <unit_test.hpp>

List of all members.

Static Public Attributes

static std::ofstream m_test_log_file
 xml log results output stream (needs to be global)

Detailed Description

config is intended for use as a global fixture. By including the following line in one source code file of a unit test project, the constructor will run once before the first test and the destructor will run once after the last test:

BOOST_GLOBAL_FIXTURE(pion::test::config);

Definition at line 209 of file unit_test.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tcp__timer_8cpp_source.html0000644000372000001440000001266712314121441023002 0ustar robertousers pion: src/tcp_timer.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1file__not__found-members.html0000644000372000001440000000664112314121441027344 0ustar robertousers pion: Member List

pion::error::file_not_found Member List

This is the complete list of members for pion::error::file_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1__http__protocol__info__t.html0000644000372000001440000001065212314121441027657 0ustar robertousers pion: pion::spdy::_http_protocol_info_t Struct Reference

pion::spdy::_http_protocol_info_t Struct Reference

This structure contains the HTTP Protocol information. More...

#include <types.hpp>

List of all members.

Public Attributes

std::map< std::string,
std::string > 
http_headers
boost::uint32_t http_type
boost::uint32_t stream_id
boost::uint32_t data_offset
boost::uint32_t data_size
bool last_chunk

Detailed Description

This structure contains the HTTP Protocol information.

Definition at line 69 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x75.html0000644000372000001440000001412212314121441022135 0ustar robertousers pion: Class Members - Functions
 

- u -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_cookie_service-members.html0000644000372000001440000001162212314121441027527 0ustar robertousers pion: Member List

pion::plugins::CookieService Member List

This is the complete list of members for pion::plugins::CookieService, including all inherited members.
CookieService(void) (defined in pion::plugins::CookieService)pion::plugins::CookieService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::CookieService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~CookieService() (defined in pion::plugins::CookieService)pion::plugins::CookieService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1process_1_1config__type.html0000644000372000001440000001125512314121441025632 0ustar robertousers pion: pion::process::config_type Struct Reference

pion::process::config_type Struct Reference

data type for static/global process configuration information More...

#include <process.hpp>

List of all members.

Public Member Functions

 config_type ()
 constructor just initializes native types

Public Attributes

bool shutdown_now
 true if we should shutdown now
boost::condition shutdown_cond
 triggered when it is time to shutdown
boost::mutex shutdown_mutex
 used to protect the shutdown condition

Detailed Description

data type for static/global process configuration information

Definition at line 90 of file process.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1read__file.html0000644000372000001440000000500512314121441024466 0ustar robertousers pion: pion::error::read_file Class Reference

pion::error::read_file Class Reference

exception thrown if we failed to read data from a file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we failed to read data from a file

Definition at line 160 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__basic__auth_8cpp_source.html0000644000372000001440000004172512314121441024311 0ustar robertousers pion: src/http_basic_auth.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/message_8hpp_source.html0000644000372000001440000020240712314121440022276 0ustar robertousers pion: include/pion/http/message.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin-members.html0000644000372000001440000001521212314121441023632 0ustar robertousers pion: Member List

pion::plugin Member List

This is the complete list of members for pion::plugin, including all inherited members.
add_plugin_directory(const std::string &dir)pion::plugin [static]
add_static_entry_point(const std::string &plugin_name, void *create_func, void *destroy_func)pion::plugin [static]
check_cygwin_path(boost::filesystem::path &final_path, const std::string &path_string)pion::plugin [static]
close(void)pion::plugin [inline]
find_config_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
find_plugin_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
get_all_plugin_names(std::vector< std::string > &plugin_names)pion::plugin [static]
get_create_function(void)pion::plugin [inline, protected]
get_destroy_function(void)pion::plugin [inline, protected]
get_plugin_name(void) const pion::plugin [inline]
grab_data(const plugin &p)pion::plugin [protected]
is_open(void) const pion::plugin [inline]
open(const std::string &plugin_name)pion::plugin
open_file(const std::string &plugin_file)pion::plugin
operator=(const plugin &p)pion::plugin [inline, protected]
plugin(void)pion::plugin [inline, protected]
plugin(const plugin &p)pion::plugin [inline, protected]
release_data(void)pion::plugin [protected]
reset_plugin_directories(void)pion::plugin [static]
~plugin() (defined in pion::plugin)pion::plugin [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream__buffer.html0000644000372000001440000005600112314121441025037 0ustar robertousers pion: pion::tcp::stream_buffer Class Reference

pion::tcp::stream_buffer Class Reference

#include <stream.hpp>

List of all members.

Public Types

enum  { PUT_BACK_MAX = 10, WRITE_BUFFER_SIZE = 8192 }
typedef char char_type
typedef std::char_traits< char >
::int_type 
int_type
typedef std::char_traits< char >
::off_type 
off_type
typedef std::char_traits< char >
::pos_type 
pos_type
typedef std::char_traits< char > traits_type

Public Member Functions

 stream_buffer (tcp::connection_ptr &conn_ptr)
 stream_buffer (boost::asio::io_service &io_service, const bool ssl_flag=false)
 stream_buffer (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)
virtual ~stream_buffer ()
 virtual destructor flushes the write buffer
connectionget_connection (void)
 returns a reference to the current TCP connection
const connectionget_connection (void) const
 returns a const reference to the current TCP connection

Protected Member Functions

void setup_buffers (void)
 sets up the read and write buffers for input and output
int_type flush_output (void)
virtual int_type underflow (void)
virtual int_type overflow (int_type c)
virtual std::streamsize xsputn (const char_type *s, std::streamsize n)
virtual std::streamsize xsgetn (char_type *s, std::streamsize n)
virtual int_type sync (void)

Detailed Description

stream_buffer: std::basic_streambuf wrapper for TCP network connections. Based in part on section 13.13.3 of "The Standard C++ Library" by Nicolai M. Josuttis, published in 1999 by Addison-Wesley

Definition at line 32 of file stream.hpp.


Constructor & Destructor Documentation

pion::tcp::stream_buffer::stream_buffer ( tcp::connection_ptr &  conn_ptr  )  [inline, explicit]

constructs a TCP stream buffer object for an existing TCP connection

Parameters:
conn_ptr pointer to the TCP connection to use for reading & writing

Definition at line 56 of file stream.hpp.

References setup_buffers().

pion::tcp::stream_buffer::stream_buffer ( boost::asio::io_service &  io_service,
const bool  ssl_flag = false 
) [inline, explicit]

constructs a TCP stream buffer object for a new TCP connection

Parameters:
io_service asio service associated with the connection
ssl_flag if true then the connection will be encrypted using SSL

Definition at line 68 of file stream.hpp.

References setup_buffers().

pion::tcp::stream_buffer::stream_buffer ( boost::asio::io_service &  io_service,
connection::ssl_context_type ssl_context 
) [inline]

constructs a TCP stream buffer object for a new SSL/TCP connection

Parameters:
io_service asio service associated with the connection
ssl_context asio ssl context associated with the connection

Definition at line 82 of file stream.hpp.

References setup_buffers().


Member Function Documentation

int_type pion::tcp::stream_buffer::flush_output ( void   )  [inline, protected]

writes data in the output buffer to the TCP connection

Returns:
int_type the number of bytes sent, or eof() if there was an error

Definition at line 115 of file stream.hpp.

Referenced by overflow(), sync(), and xsputn().

virtual int_type pion::tcp::stream_buffer::overflow ( int_type  c  )  [inline, protected, virtual]

this function is called when the write buffer for the stream is full

Parameters:
c character that has not been written yet, or eof() if we are flushing
Returns:
int_type the last character written, or eof() if there was an error

Definition at line 182 of file stream.hpp.

References flush_output().

virtual int_type pion::tcp::stream_buffer::sync ( void   )  [inline, protected, virtual]

synchronize buffers with the TCP connection

Returns:
0 if successful, -1 if there was an error

Definition at line 279 of file stream.hpp.

References flush_output().

Referenced by ~stream_buffer().

virtual int_type pion::tcp::stream_buffer::underflow ( void   )  [inline, protected, virtual]

this function is called when the read buffer has no more characters available

Returns:
int_type the next character available for reading, or eof() if there was an error

Definition at line 139 of file stream.hpp.

Referenced by xsgetn().

virtual std::streamsize pion::tcp::stream_buffer::xsgetn ( char_type *  s,
std::streamsize  n 
) [inline, protected, virtual]

reads a sequence of characters

Parameters:
s pointer to where the sequence of characters will be stored
n number of characters in the sequence to read
Returns:
std::streamsize number of character read

Definition at line 252 of file stream.hpp.

References underflow().

virtual std::streamsize pion::tcp::stream_buffer::xsputn ( const char_type *  s,
std::streamsize  n 
) [inline, protected, virtual]

writes a sequence of characters

Parameters:
s pointer to a sequence of characters
n number of characters in the sequence to write
Returns:
std::streamsize number of character written

Definition at line 203 of file stream.hpp.

References flush_output().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x7e.html0000644000372000001440000002014212314121441022214 0ustar robertousers pion: Class Members - Functions
 

- ~ -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1parser.html0000644000372000001440000027410512314121441023550 0ustar robertousers pion: pion::http::parser Class Reference

pion::http::parser Class Reference

#include <parser.hpp>

Inherited by pion::http::reader.

List of all members.

Classes

class  error_category_t
 class-specific error category More...

Public Types

enum  error_value_t {
  ERROR_METHOD_CHAR = 1, ERROR_METHOD_SIZE, ERROR_URI_CHAR, ERROR_URI_SIZE,
  ERROR_QUERY_CHAR, ERROR_QUERY_SIZE, ERROR_VERSION_EMPTY, ERROR_VERSION_CHAR,
  ERROR_STATUS_EMPTY, ERROR_STATUS_CHAR, ERROR_HEADER_CHAR, ERROR_HEADER_NAME_SIZE,
  ERROR_HEADER_VALUE_SIZE, ERROR_INVALID_CONTENT_LENGTH, ERROR_CHUNK_CHAR, ERROR_MISSING_CHUNK_DATA,
  ERROR_MISSING_HEADER_DATA, ERROR_MISSING_TOO_MUCH_CONTENT
}
 

class-specific error code values


typedef boost::function2< void,
const char *, std::size_t > 
payload_handler_t
 callback type used to consume payload content

Public Member Functions

 parser (const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)
virtual ~parser ()
 default destructor
boost::tribool parse (http::message &http_msg, boost::system::error_code &ec)
boost::tribool parse_missing_data (http::message &http_msg, std::size_t len, boost::system::error_code &ec)
void finish (http::message &http_msg) const
void set_read_buffer (const char *ptr, size_t len)
void load_read_pos (const char *&read_ptr, const char *&read_end_ptr) const
bool check_premature_eof (http::message &http_msg)
void parse_headers_only (bool b=true)
void skip_header_parsing (http::message &http_msg)
void reset (void)
 resets the parser to its initial state
bool eof (void) const
 returns true if there are no more bytes available in the read buffer
std::size_t bytes_available (void) const
 returns the number of bytes available in the read buffer
std::size_t gcount (void) const
 returns the number of bytes read during the last parse operation
std::size_t get_total_bytes_read (void) const
 returns the total number of bytes read while parsing the HTTP message
std::size_t get_content_bytes_read (void) const
 returns the total number of bytes read while parsing the payload content
std::size_t get_max_content_length (void) const
 returns the maximum length for HTTP payload content
const std::string & get_raw_headers (void) const
 returns the raw HTTP headers saved by the parser
bool get_save_raw_headers (void) const
 returns true if the parser is saving raw HTTP header contents
bool get_parse_headers_only (void)
 returns true if parsing headers only
bool is_parsing_request (void) const
 returns true if the parser is being used to parse an HTTP request
bool is_parsing_response (void) const
 returns true if the parser is being used to parse an HTTP response
void set_payload_handler (payload_handler_t &h)
 defines a callback function to be used for consuming payload content
void set_max_content_length (std::size_t n)
 sets the maximum length for HTTP payload content
void reset_max_content_length (void)
 resets the maximum length for HTTP payload content to the default value
void set_save_raw_headers (bool b)
 sets parameter for saving raw HTTP header content
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
boost::tribool finish_header_parsing (http::message &http_msg, boost::system::error_code &ec)

Static Public Member Functions

static bool parse_uri (const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)
static bool parse_url_encoded (ihash_multimap &dict, const char *ptr, const std::size_t len)
static bool parse_multipart_form_data (ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)
static bool parse_cookie_header (ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)
static bool parse_cookie_header (ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)
static bool parse_url_encoded (ihash_multimap &dict, const std::string &query)
static bool parse_multipart_form_data (ihash_multimap &dict, const std::string &content_type, const std::string &form_data)
static bool parse_forwarded_for (const std::string &header, std::string &public_ip)
static error_category_tget_error_category (void)
 returns an instance of parser::error_category_t

Static Public Attributes

static const std::size_t DEFAULT_CONTENT_MAX = 1024 * 1024
 maximum length for HTTP payload content

Protected Member Functions

virtual void finished_parsing_headers (const boost::system::error_code &ec)
 Called after we have finished parsing the HTTP message headers.
boost::tribool parse_headers (http::message &http_msg, boost::system::error_code &ec)
void update_message_with_header_data (http::message &http_msg) const
boost::tribool parse_chunks (http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)
boost::tribool consume_content (http::message &http_msg, boost::system::error_code &ec)
std::size_t consume_content_as_next_chunk (http::message::chunk_cache_t &chunk_buffers)

Static Protected Member Functions

static void compute_msg_status (http::message &http_msg, bool msg_parsed_ok)
static void set_error (boost::system::error_code &ec, error_value_t ev)
static void create_error_category (void)
 creates the unique parser error_category_t
static bool is_char (int c)
static bool is_control (int c)
static bool is_special (int c)
static bool is_digit (int c)
static bool is_hex_digit (int c)
static bool is_cookie_attribute (const std::string &name, bool set_cookie_header)

Protected Attributes

logger m_logger
 primary logging interface used by this class
const bool m_is_request
 true if the message is an HTTP request; false if it is an HTTP response
const char * m_read_ptr
 points to the next character to be consumed in the read_buffer
const char * m_read_end_ptr
 points to the end of the read_buffer (last byte + 1)

Static Protected Attributes

static const boost::uint32_t STATUS_MESSAGE_MAX = 1024
 maximum length for response status message
static const boost::uint32_t METHOD_MAX = 1024
 maximum length for the request method
static const boost::uint32_t RESOURCE_MAX = 256 * 1024
 maximum length for the resource requested
static const boost::uint32_t QUERY_STRING_MAX = 1024 * 1024
 maximum length for the query string
static const boost::uint32_t HEADER_NAME_MAX = 1024
 maximum length for an HTTP header name
static const boost::uint32_t HEADER_VALUE_MAX = 1024 * 1024
 maximum length for an HTTP header value
static const boost::uint32_t QUERY_NAME_MAX = 1024
 maximum length for the name of a query string variable
static const boost::uint32_t QUERY_VALUE_MAX = 1024 * 1024
 maximum length for the value of a query string variable
static const boost::uint32_t COOKIE_NAME_MAX = 1024
 maximum length for the name of a cookie name
static const boost::uint32_t COOKIE_VALUE_MAX = 1024 * 1024
 maximum length for the value of a cookie; also used for path and domain

Detailed Description

parser: parses HTTP messages

Definition at line 39 of file parser.hpp.


Constructor & Destructor Documentation

pion::http::parser::parser ( const bool  is_request,
std::size_t  max_content_length = DEFAULT_CONTENT_MAX 
) [inline]

creates new parser objects

Parameters:
is_request if true, the message is parsed as an HTTP request; if false, the message is parsed as an HTTP response
max_content_length maximum length for HTTP payload content

Definition at line 129 of file parser.hpp.


Member Function Documentation

bool pion::http::parser::check_premature_eof ( http::message http_msg  )  [inline]

checks to see if a premature EOF was encountered while parsing. This should be called if there is no more data to parse, and if the last call to the parse() function returned boost::indeterminate

Parameters:
http_msg the HTTP message object being parsed
Returns:
true if premature EOF, false if message is OK & finished parsing

Definition at line 208 of file parser.hpp.

References pion::http::message::concatenate_chunks().

Referenced by pion::http::message::read(), and pion::http::message::receive().

void pion::http::parser::compute_msg_status ( http::message http_msg,
bool  msg_parsed_ok 
) [static, protected]

compute and sets a HTTP Message data integrity status

Parameters:
http_msg target HTTP message
msg_parsed_ok message parsing result

Definition at line 1550 of file http_parser.cpp.

References pion::http::message::has_data_after_missing_packets(), and pion::http::message::has_missing_packets().

Referenced by finish(), parse(), and parse_missing_data().

boost::tribool pion::http::parser::consume_content ( http::message http_msg,
boost::system::error_code &  ec 
) [protected]

consumes payload content in the parser's read buffer

Parameters:
http_msg the HTTP message object to consume content for
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing message, indeterminate = message is not yet finished

Definition at line 1420 of file http_parser.cpp.

References bytes_available(), pion::http::message::get_content(), and m_read_ptr.

Referenced by parse().

std::size_t pion::http::parser::consume_content_as_next_chunk ( http::message::chunk_cache_t chunk_buffers  )  [protected]

consume the bytes available in the read buffer, converting them into the next chunk for the HTTP message

Parameters:
chunk_buffers buffers to be populated from parsing chunked content
Returns:
std::size_t number of content bytes consumed, if any

Definition at line 1465 of file http_parser.cpp.

References bytes_available(), m_read_end_ptr, and m_read_ptr.

Referenced by parse().

boost::tribool pion::http::parser::finish_header_parsing ( http::message http_msg,
boost::system::error_code &  ec 
)

should be called after parsing HTTP headers, to prepare for payload content parsing available in the read buffer

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message (no content), indeterminate = payload content is available to be parsed

Definition at line 743 of file http_parser.cpp.

References pion::http::message::create_content_buffer(), finished_parsing_headers(), pion::http::message::get_chunk_cache(), pion::http::message::get_content_length(), pion::http::message::has_header(), pion::http::message::is_chunked(), pion::http::message::is_content_length_implied(), m_is_request, m_logger, pion::http::message::set_content_length(), set_error(), pion::http::message::update_content_length_using_header(), update_message_with_header_data(), and pion::http::message::update_transfer_encoding_using_header().

Referenced by parse().

void pion::http::parser::load_read_pos ( const char *&  read_ptr,
const char *&  read_end_ptr 
) const [inline]

loads a read position bookmark

Parameters:
read_ptr points to the next character to be consumed in the read_buffer
read_end_ptr points to the end of the read_buffer (last byte + 1)

Definition at line 195 of file parser.hpp.

Referenced by pion::http::message::receive().

boost::tribool pion::http::parser::parse ( http::message http_msg,
boost::system::error_code &  ec 
)

parses an HTTP message including all payload content it might contain

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message, indeterminate = not yet finished parsing HTTP message

Definition at line 46 of file http_parser.cpp.

References compute_msg_status(), pion::http::message::concatenate_chunks(), consume_content(), consume_content_as_next_chunk(), eof(), finish(), finish_header_parsing(), pion::http::message::get_chunk_cache(), pion::http::message::has_missing_packets(), parse_chunks(), and parse_headers().

Referenced by pion::http::reader::consume_bytes(), pion::http::message::read(), and pion::http::message::receive().

boost::tribool pion::http::parser::parse_chunks ( http::message::chunk_cache_t chunk_buffers,
boost::system::error_code &  ec 
) [protected]

parses a chunked HTTP message-body using bytes available in the read buffer

Parameters:
chunk_buffers buffers to be populated from parsing chunked content
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing message, indeterminate = message is not yet finished

Definition at line 1254 of file http_parser.cpp.

References bytes_available(), m_logger, m_read_end_ptr, m_read_ptr, and set_error().

Referenced by parse().

static bool pion::http::parser::parse_cookie_header ( ihash_multimap &  dict,
const std::string &  cookie_header,
bool  set_cookie_header 
) [inline, static]

parse key-value pairs out of a "Cookie" request header (i.e. this=that; a=value)

Parameters:
dict dictionary for key-values pairs
cookie_header header string to be parsed
set_cookie_header set true if parsing Set-Cookie response header
Returns:
bool true if successful

Definition at line 369 of file parser.hpp.

static bool pion::http::parser::parse_cookie_header ( ihash_multimap &  dict,
const char *  ptr,
const std::size_t  len,
bool  set_cookie_header 
) [static]

parse key-value pairs out of a "Cookie" request header (i.e. this=that; a=value)

Parameters:
dict dictionary for key-values pairs
ptr points to the start of the header string to be parsed
len length of the encoded string, in bytes
set_cookie_header set true if parsing Set-Cookie response header
Returns:
bool true if successful

Referenced by update_message_with_header_data().

bool pion::http::parser::parse_forwarded_for ( const std::string &  header,
std::string &  public_ip 
) [static]

parses an X-Forwarded-For HTTP header, and extracts from it an IP address that best matches the client's public IP address (if any are found)

Parameters:
header the X-Forwarded-For HTTP header to parse
public_ip the extract IP address, if found
Returns:
bool true if a public IP address was found and extracted

static regex used to check for private/local networks: 10.* 127.* 192.168.* 172.16-31.*

Definition at line 1570 of file http_parser.cpp.

boost::tribool pion::http::parser::parse_headers ( http::message http_msg,
boost::system::error_code &  ec 
) [protected]

parses an HTTP message up to the end of the headers using bytes available in the read buffer

Parameters:
http_msg the HTTP message object to populate from parsing
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP headers, indeterminate = not yet finished parsing HTTP headers

Definition at line 239 of file http_parser.cpp.

References pion::http::message::add_header(), pion::http::message::get_version_major(), pion::http::message::get_version_minor(), HEADER_NAME_MAX, HEADER_VALUE_MAX, m_is_request, m_logger, m_read_end_ptr, m_read_ptr, METHOD_MAX, QUERY_STRING_MAX, RESOURCE_MAX, set_error(), pion::http::message::set_version_major(), pion::http::message::set_version_minor(), and STATUS_MESSAGE_MAX.

Referenced by parse().

void pion::http::parser::parse_headers_only ( bool  b = true  )  [inline]

controls headers-only parsing (default is disabled; content parsed also)

Parameters:
b if true, then the parse() function returns true after headers

Definition at line 222 of file parser.hpp.

Referenced by pion::http::message::read(), and pion::http::message::receive().

boost::tribool pion::http::parser::parse_missing_data ( http::message http_msg,
std::size_t  len,
boost::system::error_code &  ec 
)

attempts to continue parsing despite having missed data (length is known but content is not)

Parameters:
http_msg the HTTP message object to populate from parsing
len the length in bytes of the missing data
ec error_code contains additional information for parsing errors
Returns:
boost::tribool result of parsing: false = message has an error, true = finished parsing HTTP message, indeterminate = not yet finished parsing HTTP message

Definition at line 125 of file http_parser.cpp.

References compute_msg_status(), finish(), pion::http::message::get_chunk_cache(), pion::http::message::get_content(), set_error(), and pion::http::message::set_missing_packets().

static bool pion::http::parser::parse_multipart_form_data ( ihash_multimap &  dict,
const std::string &  content_type,
const std::string &  form_data 
) [inline, static]

parse key-value pairs out of a multipart/form-data payload content (http://www.ietf.org/rfc/rfc2388.txt)

Parameters:
dict dictionary for key-values pairs
content_type value of the content-type HTTP header
form_data the encoded form data
Returns:
bool true if successful

Definition at line 400 of file parser.hpp.

static bool pion::http::parser::parse_multipart_form_data ( ihash_multimap &  dict,
const std::string &  content_type,
const char *  ptr,
const std::size_t  len 
) [static]

parse key-value pairs out of a multipart/form-data payload content (http://www.ietf.org/rfc/rfc2388.txt)

Parameters:
dict dictionary for key-values pairs
content_type value of the content-type HTTP header
ptr points to the start of the encoded data
len length of the encoded data, in bytes
Returns:
bool true if successful

Referenced by finish().

bool pion::http::parser::parse_uri ( const std::string &  uri,
std::string &  proto,
std::string &  host,
boost::uint16_t &  port,
std::string &  path,
std::string &  query 
) [static]

parses a URI string

Parameters:
uri the string to parse
proto will be set to the protocol (i.e. "http")
host will be set to the hostname (i.e. "www.cloudmeter.com")
port host port number to use for connection (i.e. 80)
path uri stem or file path
query uri query string
Returns:
true if the URI was successfully parsed, false if there was an error

Definition at line 830 of file http_parser.cpp.

static bool pion::http::parser::parse_url_encoded ( ihash_multimap &  dict,
const std::string &  query 
) [inline, static]

parse key-value pairs out of a url-encoded string (i.e. this=that&a=value)

Parameters:
dict dictionary for key-values pairs
query the encoded query string to be parsed
Returns:
bool true if successful

Definition at line 384 of file parser.hpp.

static bool pion::http::parser::parse_url_encoded ( ihash_multimap &  dict,
const char *  ptr,
const std::size_t  len 
) [static]

parse key-value pairs out of a url-encoded string (i.e. this=that&a=value)

Parameters:
dict dictionary for key-values pairs
ptr points to the start of the encoded string
len length of the encoded string, in bytes
Returns:
bool true if successful

Referenced by finish(), and update_message_with_header_data().

static void pion::http::parser::set_error ( boost::system::error_code &  ec,
error_value_t  ev 
) [inline, static, protected]

sets an error code

Parameters:
ec error code variable to define
ev error value to raise

Definition at line 516 of file parser.hpp.

Referenced by finish_header_parsing(), parse_chunks(), parse_headers(), and parse_missing_data().

void pion::http::parser::set_read_buffer ( const char *  ptr,
size_t  len 
) [inline]

resets the location and size of the read buffer

Parameters:
ptr pointer to the first bytes available to be read
len number of bytes available to be read

Definition at line 184 of file parser.hpp.

Referenced by pion::http::reader::consume_bytes(), pion::http::message::read(), and pion::http::message::receive().

void pion::http::parser::skip_header_parsing ( http::message http_msg  )  [inline]

skip parsing all headers and parse payload content only

Parameters:
http_msg the HTTP message object being parsed

Definition at line 229 of file parser.hpp.

void pion::http::parser::update_message_with_header_data ( http::message http_msg  )  const [protected]

The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service-members.html0000644000372000001440000001214612314121441027041 0ustar robertousers pion: Member List

pion::plugins::LogService Member List

This is the complete list of members for pion::plugins::LogService, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
getLogAppender(void)pion::plugins::LogService [inline]
LogService(void) (defined in pion::plugins::LogService)pion::plugins::LogService
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::LogService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~LogService() (defined in pion::plugins::LogService)pion::plugins::LogService [virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1parser_1_1error__category__t-members.html0000644000372000001440000000434312314121441031423 0ustar robertousers pion: Member List

pion::http::parser::error_category_t Member List

This is the complete list of members for pion::http::parser::error_category_t, including all inherited members.
message(int ev) const (defined in pion::http::parser::error_category_t)pion::http::parser::error_category_t [inline]
name() const BOOST_SYSTEM_NOEXCEPT (defined in pion::http::parser::error_category_t)pion::http::parser::error_category_t [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x6c.html0000644000372000001440000001302412314121441022212 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1reader-members.html0000644000372000001440000007152012314121441025142 0ustar robertousers pion: Member List

pion::http::reader Member List

This is the complete list of members for pion::http::reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_parsing_headers(const boost::system::error_code &ec)pion::http::parser [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)=0pion::http::reader [protected, pure virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)=0pion::http::reader [protected, pure virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)=0pion::http::reader [protected, pure virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/doxygen.css0000644000372000001440000001473312314121440017637 0ustar robertousers/* The standard CSS for doxygen */ body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; font-size: 12px; } /* @group Heading Levels */ h1 { text-align: center; font-size: 150%; } h2 { font-size: 120%; } h3 { font-size: 100%; } dt { font-weight: bold; } div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; } p.startli, p.startdd { margin-top: 2px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } div.qindex, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #153788; font-weight: normal; text-decoration: none; } .contents a:visited { color: #1b77c5; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } .contents a.qindexHL:visited { color: #ffffff; } a.el { font-weight: bold; } a.elRef { } a.code { } a.codeRef { } /* @end */ dl.el { margin-left: -1cm; } .fragment { font-family: monospace, fixed; font-size: 105%; } pre.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 4px 6px; margin: 4px 8px 4px 2px; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } div.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background: white; color: black; margin-right: 20px; margin-left: 20px; } td.indexkey { background-color: #e8eef2; font-weight: bold; border: 1px solid #CCCCCC; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { background-color: #e8eef2; border: 1px solid #CCCCCC; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #f0f0f0; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } img.footer { border: 0px; vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } /* @end */ .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } th.dirtab { background: #e8eef2; font-weight: bold; } hr { height: 0; border: none; border-top: 1px solid #666; } /* @group Member Descriptions */ .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #FAFAFA; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-top: 1px solid #ccc; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memTemplParams { color: #606060; white-space: nowrap; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 0; margin-bottom: 10px; } .memname { white-space: nowrap; font-weight: bold; } .memproto, .memdoc { border: 1px solid #84b0c7; } .memproto { padding: 0; background-color: #d5e1e8; font-weight: bold; -webkit-border-top-left-radius: 8px; -webkit-border-top-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-topleft: 8px; -moz-border-radius-topright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .memdoc { padding: 2px 5px; background-color: #eef3f5; border-top-width: 0; -webkit-border-bottom-left-radius: 8px; -webkit-border-bottom-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-bottomleft: 8px; -moz-border-radius-bottomright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } /* @end */ /* @group Directory (tree) */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin: 0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title with an image of your choice. Simply uncomment the next two styles, specify the name of your image and be sure to set 'height' to the proper pixel height of your image. */ /* .directory h3.swap { height: 61px; background-repeat: no-repeat; background-image: url("yourimage.gif"); } .directory h3.swap span { display: none; } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } /* @end */ address { font-style: normal; color: #333; } pion-5.0.6+dfsg.orig/doc/html/structpion_1_1one__to__one__scheduler_1_1service__pair__type.html0000644000372000001440000000646012314121441032342 0ustar robertousers pion: pion::one_to_one_scheduler::service_pair_type Struct Reference

pion::one_to_one_scheduler::service_pair_type Struct Reference

typedef for a pair object where first is an IO service and second is a deadline timer More...

#include <scheduler.hpp>

List of all members.

Public Attributes

boost::asio::io_service first
boost::asio::deadline_timer second

Detailed Description

typedef for a pair object where first is an IO service and second is a deadline timer

Definition at line 342 of file scheduler.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1exception-members.html0000644000372000001440000000722112314121441024333 0ustar robertousers pion: Member List

pion::exception Member List

This is the complete list of members for pion::exception, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
update_what_msg() const (defined in pion::exception)pion::exception [inline, protected, virtual]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/admin__rights_8hpp_source.html0000644000372000001440000001376612314121440023471 0ustar robertousers pion: include/pion/admin_rights.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1http_1_1message_1_1receive__error__t-members.html0000644000372000001440000000514312314121441031576 0ustar robertousers pion: Member List

pion::http::message::receive_error_t Member List

This is the complete list of members for pion::http::message::receive_error_t, including all inherited members.
message(int ev) const (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]
name() const BOOST_SYSTEM_NOEXCEPT (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]
~receive_error_t() (defined in pion::http::message::receive_error_t)pion::http::message::receive_error_t [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__ptr-members.html0000644000372000001440000002141512314121441024660 0ustar robertousers pion: Member List

pion::plugin_ptr< InterfaceClassType > Member List

This is the complete list of members for pion::plugin_ptr< InterfaceClassType >, including all inherited members.
add_plugin_directory(const std::string &dir)pion::plugin [static]
add_static_entry_point(const std::string &plugin_name, void *create_func, void *destroy_func)pion::plugin [static]
check_cygwin_path(boost::filesystem::path &final_path, const std::string &path_string)pion::plugin [static]
close(void)pion::plugin [inline]
create(void)pion::plugin_ptr< InterfaceClassType > [inline]
CreateObjectFunction typedefpion::plugin_ptr< InterfaceClassType > [protected]
destroy(InterfaceClassType *object_ptr)pion::plugin_ptr< InterfaceClassType > [inline]
DestroyObjectFunction typedefpion::plugin_ptr< InterfaceClassType > [protected]
find_config_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
find_plugin_file(std::string &path_to_file, const std::string &name)pion::plugin [inline, static]
get_all_plugin_names(std::vector< std::string > &plugin_names)pion::plugin [static]
get_create_function(void)pion::plugin [inline, protected]
get_destroy_function(void)pion::plugin [inline, protected]
get_plugin_name(void) const pion::plugin [inline]
grab_data(const plugin &p)pion::plugin [protected]
is_open(void) const pion::plugin [inline]
open(const std::string &plugin_name)pion::plugin
open_file(const std::string &plugin_file)pion::plugin
operator=(const plugin_ptr &p)pion::plugin_ptr< InterfaceClassType > [inline]
plugin(void)pion::plugin [inline, protected]
plugin(const plugin &p)pion::plugin [inline, protected]
plugin_ptr(void)pion::plugin_ptr< InterfaceClassType > [inline]
plugin_ptr(const plugin_ptr &p)pion::plugin_ptr< InterfaceClassType > [inline]
release_data(void)pion::plugin [protected]
reset_plugin_directories(void)pion::plugin [static]
~plugin() (defined in pion::plugin)pion::plugin [inline, virtual]
~plugin_ptr() (defined in pion::plugin_ptr< InterfaceClassType >)pion::plugin_ptr< InterfaceClassType > [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__manager.html0000644000372000001440000010601412314121441024034 0ustar robertousers pion: pion::plugin_manager< PluginType > Class Template Reference

pion::plugin_manager< PluginType > Class Template Reference

#include <plugin_manager.hpp>

List of all members.

Classes

class  map_type
 data type that maps identifiers to plug-in objects More...

Public Types

typedef boost::function1< void,
PluginType * > 
PluginRunFunction
 data type for a function that may be called by the run() method
typedef boost::function1
< boost::uint64_t, const
PluginType * > 
PluginStatFunction
 data type for a function that may be called by the getStat() method

Public Member Functions

 plugin_manager (void)
 default constructor
virtual ~plugin_manager ()
 default destructor
void clear (void)
 clears all the plug-in objects being managed
bool empty (void) const
 returns true if there are no plug-in objects being managed
void add (const std::string &plugin_id, PluginType *plugin_object_ptr)
void remove (const std::string &plugin_id)
void replace (const std::string &plugin_id, PluginType *plugin_ptr)
PluginType * clone (const std::string &plugin_id)
PluginType * load (const std::string &plugin_id, const std::string &plugin_type)
PluginType * get (const std::string &plugin_id)
const PluginType * get (const std::string &plugin_id) const
plugin_ptr< PluginType > get_lib_ptr (const std::string &plugin_id) const
PluginType * find (const std::string &resource)
void run (PluginRunFunction run_func)
void run (const std::string &plugin_id, PluginRunFunction run_func)
boost::uint64_t get_statistic (PluginStatFunction stat_func) const
boost::uint64_t get_statistic (const std::string &plugin_id, PluginStatFunction stat_func) const

Protected Attributes

map_type m_plugin_map
 collection of plug-in objects being managed
boost::mutex m_plugin_mutex
 mutex to make class thread-safe

Detailed Description

template<typename PluginType>
class pion::plugin_manager< PluginType >

plugin_manager: used to manage a collection of plug-in objects

Definition at line 31 of file plugin_manager.hpp.


Member Function Documentation

template<typename PluginType>
void pion::plugin_manager< PluginType >::add ( const std::string &  plugin_id,
PluginType *  plugin_object_ptr 
) [inline]

adds a new plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_object_ptr pointer to the plug-in object to add

Definition at line 188 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

Referenced by pion::http::plugin_server::add_service().

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::clone ( const std::string &  plugin_id  )  [inline]

clones an existing plug-in object (creates a new one of the same type)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the new plug-in object

Definition at line 229 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::find ( const std::string &  resource  )  [inline]

finds the plug-in object associated with a particular resource (fuzzy match)

Parameters:
resource resource identifier (uri-stem) to search for
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 295 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
const PluginType * pion::plugin_manager< PluginType >::get ( const std::string &  plugin_id  )  const [inline]

gets the plug-in object associated with a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 273 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::get ( const std::string &  plugin_id  )  [inline]

gets the plug-in object associated with a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
PluginType* pointer to the matching plug-in object or NULL if not found

Definition at line 262 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
plugin_ptr< PluginType > pion::plugin_manager< PluginType >::get_lib_ptr ( const std::string &  plugin_id  )  const [inline]

gets a smart pointer to the plugin shared library for a particular plugin_id (exact match)

Parameters:
plugin_id unique identifier associated with the plug-in
Returns:
plugin_ptr<PluginType> pointer to the plugin shared library if found

Definition at line 284 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
boost::uint64_t pion::plugin_manager< PluginType >::get_statistic ( const std::string &  plugin_id,
PluginStatFunction  stat_func 
) const [inline]

returns a statistic value for a particular plug-in

Parameters:
plugin_id unique identifier associated with the plug-in
stat_func the statistic function to execute

Definition at line 372 of file plugin_manager.hpp.

template<typename PluginType >
boost::uint64_t pion::plugin_manager< PluginType >::get_statistic ( PluginStatFunction  stat_func  )  const [inline]

returns a total statistic value summed for every plug-in being managed

Parameters:
stat_func the statistic function to execute for each plug-in object

Definition at line 359 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
PluginType * pion::plugin_manager< PluginType >::load ( const std::string &  plugin_id,
const std::string &  plugin_type 
) [inline]

loads a new plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_type the name or type of the plug-in to load (searches plug-in directories and appends extensions)
Returns:
PluginType* pointer to the new plug-in object

Definition at line 239 of file plugin_manager.hpp.

References pion::plugin_ptr< InterfaceClassType >::create(), pion::plugin_manager< PluginType >::m_plugin_map, pion::plugin_manager< PluginType >::m_plugin_mutex, and pion::plugin::open().

Referenced by pion::http::plugin_server::load_service().

template<typename PluginType >
void pion::plugin_manager< PluginType >::remove ( const std::string &  plugin_id  )  [inline]

removes a plug-in object

Parameters:
plugin_id unique identifier associated with the plug-in

Definition at line 198 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType>
void pion::plugin_manager< PluginType >::replace ( const std::string &  plugin_id,
PluginType *  plugin_ptr 
) [inline]

replaces an existing plug-in object with a new one

Parameters:
plugin_id unique identifier associated with the plug-in
plugin_ptr pointer to the new plug-in object which will replace the old one

Definition at line 213 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

template<typename PluginType >
void pion::plugin_manager< PluginType >::run ( const std::string &  plugin_id,
PluginRunFunction  run_func 
) [inline]

runs a method for a particular plug-in

Parameters:
plugin_id unique identifier associated with the plug-in
run_func the function to execute

Definition at line 348 of file plugin_manager.hpp.

template<typename PluginType >
void pion::plugin_manager< PluginType >::run ( PluginRunFunction  run_func  )  [inline]

runs a method for every plug-in being managed

Parameters:
run_func the function to execute for each plug-in object

Definition at line 337 of file plugin_manager.hpp.

References pion::plugin_manager< PluginType >::m_plugin_map, and pion::plugin_manager< PluginType >::m_plugin_mutex.

Referenced by pion::http::plugin_server::set_service_option().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/error_8hpp_source.html0000644000372000001440000005756412314121440022017 0ustar robertousers pion: include/pion/error.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1server-members.html0000644000372000001440000002231212314121441025010 0ustar robertousers pion: Member List

pion::tcp::server Member List

This is the complete list of members for pion::tcp::server, including all inherited members.
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_connection(tcp::connection_ptr &tcp_conn)pion::tcp::server [inline, protected, virtual]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
server(const unsigned int tcp_port)pion::tcp::server [explicit, protected]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [explicit, protected]
server(scheduler &sched, const unsigned int tcp_port=0)pion::tcp::server [explicit, protected]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [protected]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
~server()pion::tcp::server [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_file_service.html0000644000372000001440000004200512314121441025544 0ustar robertousers pion: pion::plugins::FileService Class Reference

pion::plugins::FileService Class Reference

#include <FileService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void set_option (const std::string &name, const std::string &value)
virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for FileService
virtual void start (void)
 called when the web service's server is starting
virtual void stop (void)
 called when the web service's server is stopping
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Protected Types

typedef PION_HASH_MAP
< std::string, DiskFile,
PION_HASH_STRING > 
CacheMap
 data type for map of file names to cache entries
typedef PION_HASH_MAP
< std::string, std::string,
PION_HASH_STRING > 
MIMETypeMap
 data type for map of file extensions to MIME types

Protected Member Functions

void scanDirectory (const boost::filesystem::path &dir_path)
std::pair< CacheMap::iterator,
bool > 
addCacheEntry (const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder)
void sendNotFoundResponse (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)

Static Protected Member Functions

static std::string findMIMEType (const std::string &file_name)

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

FileService: web service that serves regular files

Definition at line 235 of file FileService.hpp.


Member Function Documentation

std::pair< FileService::CacheMap::iterator, bool > pion::plugins::FileService::addCacheEntry ( const std::string &  relative_path,
const boost::filesystem::path &  file_path,
const bool  placeholder 
) [protected]

adds a single file to the cache

Parameters:
relative_path path for the file relative to the root directory
file_path actual path to the file on disk
placeholder if true, the file's contents are not cached
Returns:
std::pair<CacheMap::iterator, bool> if an entry is added to the cache, second will be true and first will point to the new entry

Definition at line 665 of file FileService.cpp.

References findMIMEType(), pion::plugins::DiskFile::getFileSize(), m_logger, pion::plugins::DiskFile::read(), and pion::plugins::DiskFile::update().

Referenced by scanDirectory(), and start().

std::string pion::plugins::FileService::findMIMEType ( const std::string &  file_name  )  [static, protected]

searches for a MIME type that matches a file

Parameters:
file_name name of the file to search for
Returns:
MIME type corresponding with the file, or DEFAULT_MIME_TYPE if none found

Definition at line 716 of file FileService.cpp.

Referenced by addCacheEntry(), and operator()().

void pion::plugins::FileService::scanDirectory ( const boost::filesystem::path &  dir_path  )  [protected]

adds all files within a directory to the cache

Parameters:
dir_path the directory to scan (sub-directories are included)

Definition at line 625 of file FileService.cpp.

References addCacheEntry(), pion::http::plugin_service::get_resource(), and m_logger.

Referenced by start().

void pion::plugins::FileService::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

configuration options supported by FileService:

directory: all files within the directory will be made available file: cache: scan: max_chunk_size: writable:

Reimplemented from pion::http::plugin_service.

Definition at line 53 of file FileService.cpp.

References pion::plugin::check_cygwin_path().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions.html0000644000372000001440000002062512314121441020344 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- a -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_eval.html0000644000372000001440000000375312314121441021356 0ustar robertousers pion: Class Members - Enumerator
 

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_echo_service_8cpp_source.html0000644000372000001440000003301612314121441023441 0ustar robertousers pion: services/EchoService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1open__file.html0000644000372000001440000000476112314121441024524 0ustar robertousers pion: pion::error::open_file Class Reference

pion::error::open_file Class Reference

exception thrown if we failed to open a file More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we failed to open a file

Definition at line 146 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1duplicate__plugin-members.html0000644000372000001440000000664612314121441027550 0ustar robertousers pion: Member List

pion::error::duplicate_plugin Member List

This is the complete list of members for pion::error::duplicate_plugin, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x72.html0000644000372000001440000002057112314121441022137 0ustar robertousers pion: Class Members - Functions
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1__spdy__header__info-members.html0000644000372000001440000000522512314121441030214 0ustar robertousers pion: Member List

pion::spdy::_spdy_header_info Member List

This is the complete list of members for pion::spdy::_spdy_header_info, including all inherited members.
frame_type (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
header_block (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
header_block_len (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info
stream_id (defined in pion::spdy::_spdy_header_info)pion::spdy::_spdy_header_info

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/index.html0000644000372000001440000000203712314121440017437 0ustar robertousers pion: Main Page

pion Documentation

5.0.6


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser_1_1error__category__t.html0000644000372000001440000000627512314121441030001 0ustar robertousers pion: pion::spdy::parser::error_category_t Class Reference

pion::spdy::parser::error_category_t Class Reference

class-specific error category More...

#include <parser.hpp>

List of all members.

Public Member Functions

const char * name () const BOOST_SYSTEM_NOEXCEPT
std::string message (int ev) const

Detailed Description

class-specific error category

Definition at line 51 of file parser.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1http_1_1types.html0000644000372000001440000007100312314121441023627 0ustar robertousers pion: pion::http::types Struct Reference

pion::http::types Struct Reference

#include <types.hpp>

Inherited by pion::http::message.

List of all members.

Public Member Functions

virtual ~types ()
 virtual destructor

Static Public Member Functions

static std::string get_date_string (const time_t t)
 converts time_t format into an HTTP-date string
static std::string make_query_string (const ihash_multimap &query_params)
 builds an HTTP query string from a collection of query parameters
static std::string make_set_cookie_header (const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)

Static Public Attributes

static const std::string STRING_EMPTY
static const std::string STRING_CRLF
static const std::string STRING_HTTP_VERSION
static const std::string HEADER_NAME_VALUE_DELIMITER
static const std::string COOKIE_NAME_VALUE_DELIMITER
static const std::string HEADER_HOST
static const std::string HEADER_COOKIE
static const std::string HEADER_SET_COOKIE
static const std::string HEADER_CONNECTION
static const std::string HEADER_CONTENT_TYPE
static const std::string HEADER_CONTENT_LENGTH
static const std::string HEADER_CONTENT_LOCATION
static const std::string HEADER_CONTENT_ENCODING
static const std::string HEADER_CONTENT_DISPOSITION
static const std::string HEADER_LAST_MODIFIED
static const std::string HEADER_IF_MODIFIED_SINCE
static const std::string HEADER_TRANSFER_ENCODING
static const std::string HEADER_LOCATION
static const std::string HEADER_AUTHORIZATION
static const std::string HEADER_REFERER
static const std::string HEADER_USER_AGENT
static const std::string HEADER_X_FORWARDED_FOR
static const std::string HEADER_CLIENT_IP
static const std::string CONTENT_TYPE_HTML
static const std::string CONTENT_TYPE_TEXT
static const std::string CONTENT_TYPE_XML
static const std::string CONTENT_TYPE_URLENCODED
static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA
static const std::string REQUEST_METHOD_HEAD
static const std::string REQUEST_METHOD_GET
static const std::string REQUEST_METHOD_PUT
static const std::string REQUEST_METHOD_POST
static const std::string REQUEST_METHOD_DELETE
static const std::string RESPONSE_MESSAGE_OK
static const std::string RESPONSE_MESSAGE_CREATED
static const std::string RESPONSE_MESSAGE_ACCEPTED
static const std::string RESPONSE_MESSAGE_NO_CONTENT
static const std::string RESPONSE_MESSAGE_FOUND
static const std::string RESPONSE_MESSAGE_UNAUTHORIZED
static const std::string RESPONSE_MESSAGE_FORBIDDEN
static const std::string RESPONSE_MESSAGE_NOT_FOUND
static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED
static const std::string RESPONSE_MESSAGE_NOT_MODIFIED
static const std::string RESPONSE_MESSAGE_BAD_REQUEST
static const std::string RESPONSE_MESSAGE_SERVER_ERROR
static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED
static const std::string RESPONSE_MESSAGE_CONTINUE
static const unsigned int RESPONSE_CODE_OK = 200
static const unsigned int RESPONSE_CODE_CREATED = 201
static const unsigned int RESPONSE_CODE_ACCEPTED = 202
static const unsigned int RESPONSE_CODE_NO_CONTENT = 204
static const unsigned int RESPONSE_CODE_FOUND = 302
static const unsigned int RESPONSE_CODE_UNAUTHORIZED = 401
static const unsigned int RESPONSE_CODE_FORBIDDEN = 403
static const unsigned int RESPONSE_CODE_NOT_FOUND = 404
static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED = 405
static const unsigned int RESPONSE_CODE_NOT_MODIFIED = 304
static const unsigned int RESPONSE_CODE_BAD_REQUEST = 400
static const unsigned int RESPONSE_CODE_SERVER_ERROR = 500
static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED = 501
static const unsigned int RESPONSE_CODE_CONTINUE = 100

Detailed Description

types: common data types used by HTTP

Definition at line 25 of file types.hpp.


Member Function Documentation

std::string pion::http::types::make_set_cookie_header ( const std::string &  name,
const std::string &  value,
const std::string &  path,
const bool  has_max_age = false,
const unsigned long  max_age = 0 
) [static]

creates a "Set-Cookie" header

Parameters:
name the name of the cookie
value the value of the cookie
path the path of the cookie
has_max_age true if the max_age value should be set
max_age the life of the cookie, in seconds (0 = discard)
Returns:
the new "Set-Cookie" header

Definition at line 127 of file http_types.cpp.

Referenced by pion::http::response::delete_cookie(), and pion::http::response::set_cookie().


The documentation for this struct was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file_sender.html0000644000372000001440000004021412314121441026376 0ustar robertousers pion: pion::plugins::DiskFileSender Class Reference

pion::plugins::DiskFileSender Class Reference

#include <FileService.hpp>

List of all members.

Public Member Functions

virtual ~DiskFileSender ()
 default virtual destructor
void send (void)
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Static Public Member Functions

static boost::shared_ptr
< DiskFileSender
create (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0)

Protected Member Functions

 DiskFileSender (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size)
void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

DiskFileSender: class used to send files to clients using HTTP responses

Definition at line 133 of file FileService.hpp.


Constructor & Destructor Documentation

pion::plugins::DiskFileSender::DiskFileSender ( DiskFile file,
pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn,
unsigned long  max_chunk_size 
) [protected]

protected constructor restricts creation of objects (use create())

Parameters:
file disk file object that should be sent
http_request_ptr HTTP request that we are responding to
tcp_conn TCP connection used to send the file
max_chunk_size sets the maximum chunk size

Definition at line 813 of file FileService.cpp.

References pion::plugins::DiskFile::getFilePath(), pion::plugins::DiskFile::getLastModifiedString(), pion::plugins::DiskFile::getMimeType(), pion::plugins::DiskFile::hasFileContent(), and m_logger.

Referenced by create().


Member Function Documentation

static boost::shared_ptr<DiskFileSender> pion::plugins::DiskFileSender::create ( DiskFile file,
pion::http::request_ptr &  http_request_ptr,
pion::tcp::connection_ptr &  tcp_conn,
unsigned long  max_chunk_size = 0 
) [inline, static]

creates new DiskFileSender objects

Parameters:
file disk file object that should be sent
http_request_ptr HTTP request that we are responding to
tcp_conn TCP connection used to send the file
max_chunk_size sets the maximum chunk size (default=0, unlimited)

Definition at line 147 of file FileService.hpp.

References DiskFileSender().

Referenced by pion::plugins::FileService::operator()().

void pion::plugins::DiskFileSender::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [protected]

handler called after a send operation has completed

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Definition at line 939 of file FileService.cpp.

References pion::plugins::DiskFile::getFileSize(), m_logger, and send().

Referenced by send().

void pion::plugins::DiskFileSender::send ( void   ) 

Begins sending the file to the client. Following a call to this function, it is not thread safe to use your reference to the DiskFileSender object.

Definition at line 842 of file FileService.cpp.

References pion::plugins::DiskFile::getFileContent(), pion::plugins::DiskFile::getFilePath(), pion::plugins::DiskFile::getFileSize(), handle_write(), pion::plugins::DiskFile::hasFileContent(), and m_logger.

Referenced by handle_write().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/class_hello_server-members.html0000644000372000001440000002373112314121441023643 0ustar robertousers pion: Member List

HelloServer Member List

This is the complete list of members for HelloServer, including all inherited members.
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_connection(tcp::connection_ptr &tcp_conn) (defined in HelloServer)HelloServer [inline, virtual]
pion::tcp::server::handle_connection(tcp::connection_ptr &tcp_conn)pion::tcp::server [inline, protected, virtual]
HelloServer(const unsigned int tcp_port) (defined in HelloServer)HelloServer [inline]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
server(const unsigned int tcp_port)pion::tcp::server [explicit, protected]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [explicit, protected]
server(scheduler &sched, const unsigned int tcp_port=0)pion::tcp::server [explicit, protected]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::tcp::server [protected]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
~HelloServer() (defined in HelloServer)HelloServer [inline, virtual]
~server()pion::tcp::server [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6a.html0000644000372000001440000000761612314121441021207 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- j -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__types_8cpp_source.html0000644000372000001440000004670212314121441023214 0ustar robertousers pion: src/http_types.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1single__service__scheduler-members.html0000644000372000001440000003156712314121441027704 0ustar robertousers pion: Member List

pion::single_service_scheduler Member List

This is the complete list of members for pion::single_service_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::single_service_scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)pion::single_service_scheduler [inline, virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_servicepion::single_service_scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
m_timerpion::single_service_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
single_service_scheduler(void)pion::single_service_scheduler [inline]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::single_service_scheduler [virtual]
stop_services(void)pion::single_service_scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]
~single_service_scheduler()pion::single_service_scheduler [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1multi__thread__scheduler-members.html0000644000372000001440000002677012314121441027364 0ustar robertousers pion: Member List

pion::multi_thread_scheduler Member List

This is the complete list of members for pion::multi_thread_scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::scheduler [inline, protected, virtual]
finish_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
get_io_service(void)=0pion::scheduler [pure virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
m_thread_poolpion::multi_thread_scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
multi_thread_scheduler(void)pion::multi_thread_scheduler [inline]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::scheduler [inline, virtual]
stop_services(void)pion::scheduler [inline, protected, virtual]
stop_threads(void)pion::multi_thread_scheduler [inline, protected, virtual]
ThreadPool typedefpion::multi_thread_scheduler [protected]
~multi_thread_scheduler()pion::multi_thread_scheduler [inline, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1open__file-members.html0000644000372000001440000000662112314121441026151 0ustar robertousers pion: Member List

pion::error::open_file Member List

This is the complete list of members for pion::error::open_file, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1file__not__found.html0000644000372000001440000000500712314121441025707 0ustar robertousers pion: pion::error::file_not_found Class Reference

pion::error::file_not_found Class Reference

exception thrown if a file is not found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a file is not found

Definition at line 167 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_allow_nothing_service_8hpp_source.html0000644000372000001440000001030712314121441025372 0ustar robertousers pion: services/AllowNothingService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__undefined.html0000644000372000001440000000521512314121441026076 0ustar robertousers pion: pion::error::plugin_undefined Class Reference

pion::error::plugin_undefined Class Reference

exception thrown if a plugin has an undefined state More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin has an undefined state

Definition at line 202 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_vars.html0000644000372000001440000003066312314121441021402 0ustar robertousers pion: Class Members - Variables
 

- c -

- d -

- h -

- k -

- m -

- n -

- q -

- r -

- s -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/unit__test_8hpp_source.html0000644000372000001440000013227312314121441023033 0ustar robertousers pion: include/pion/test/unit_test.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_enum.html0000644000372000001440000000471612314121441021373 0ustar robertousers pion: Class Members - Enumerations
 

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_log_service_appender-members.html0000644000372000001440000000616712314121441030725 0ustar robertousers pion: Member List

pion::plugins::LogServiceAppender Member List

This is the complete list of members for pion::plugins::LogServiceAppender, including all inherited members.
addLogString(const std::string &log_string)pion::plugins::LogServiceAppender
LogServiceAppender(void) (defined in pion::plugins::LogServiceAppender)pion::plugins::LogServiceAppender
setMaxEvents(unsigned int n)pion::plugins::LogServiceAppender [inline]
writeLogEvents(pion::http::response_writer_ptr &writer)pion::plugins::LogServiceAppender
~LogServiceAppender() (defined in pion::plugins::LogServiceAppender)pion::plugins::LogServiceAppender [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_file_service_8cpp_source.html0000644000372000001440000036516312314121441023455 0ustar robertousers pion: services/FileService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_log_service_8hpp_source.html0000644000372000001440000003571212314121441023316 0ustar robertousers pion: services/LogService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http_2types_8hpp_source.html0000644000372000001440000003606712314121440023146 0ustar robertousers pion: include/pion/http/types.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x70.html0000644000372000001440000002304512314121441021121 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- p -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1server-members.html0000644000372000001440000003601612314121441025207 0ustar robertousers pion: Member List

pion::http::server Member List

This is the complete list of members for pion::http::server, including all inherited members.
add_redirect(const std::string &requested_resource, const std::string &new_resource)pion::http::server
add_resource(const std::string &resource, request_handler_t request_handler)pion::http::server
after_stopping(void)pion::tcp::server [inline, protected, virtual]
before_starting(void)pion::tcp::server [inline, protected, virtual]
clear(void)pion::http::server [inline, virtual]
error_handler_t typedefpion::http::server
find_request_handler(const std::string &resource, request_handler_t &request_handler) const pion::http::server [protected, virtual]
get_acceptor(void)pion::tcp::server [inline]
get_acceptor(void) const pion::tcp::server [inline]
get_address(void) const pion::tcp::server [inline]
get_connections(void) const pion::tcp::server
get_endpoint(void) const pion::tcp::server [inline]
get_io_service(void)pion::tcp::server [inline, protected]
get_logger(void)pion::tcp::server [inline]
get_port(void) const pion::tcp::server [inline]
get_ssl_context_type(void)pion::tcp::server [inline]
get_ssl_flag(void) const pion::tcp::server [inline]
handle_bad_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_connection(tcp::connection_ptr &tcp_conn)pion::http::server [protected, virtual]
handle_forbidden_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
handle_method_not_allowed(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")pion::http::server [static]
handle_not_found_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::server [static]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)pion::http::server [protected, virtual]
handle_server_error(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)pion::http::server [static]
is_listening(void) const pion::tcp::server [inline]
join(void)pion::tcp::server
m_loggerpion::tcp::server [protected]
remove_resource(const std::string &resource)pion::http::server
request_handler_t typedefpion::http::server
server(const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline, explicit]
server(scheduler &sched, const unsigned int tcp_port=0)pion::http::server [inline, explicit]
server(scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)pion::http::server [inline]
set_address(const boost::asio::ip::address &addr)pion::tcp::server [inline]
set_authentication(http::auth_ptr auth)pion::http::server [inline]
set_bad_request_handler(request_handler_t h)pion::http::server [inline]
set_endpoint(const boost::asio::ip::tcp::endpoint &ep)pion::tcp::server [inline]
set_error_handler(error_handler_t h)pion::http::server [inline]
set_logger(logger log_ptr)pion::tcp::server [inline]
set_max_content_length(std::size_t n)pion::http::server [inline]
set_not_found_handler(request_handler_t h)pion::http::server [inline]
set_port(unsigned int p)pion::tcp::server [inline]
set_ssl_flag(bool b=true)pion::tcp::server [inline]
set_ssl_key_file(const std::string &pem_key_file)pion::tcp::server
start(void)pion::tcp::server
stop(bool wait_until_finished=false)pion::tcp::server
strip_trailing_slash(const std::string &str)pion::http::server [inline, static]
~server()pion::http::server [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_cookie_service_8cpp_source.html0000644000372000001440000003415212314121441023776 0ustar robertousers pion: services/CookieService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1multi__thread__scheduler.html0000644000372000001440000001456312314121441025731 0ustar robertousers pion: pion::multi_thread_scheduler Class Reference

pion::multi_thread_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::scheduler.

Inherited by pion::one_to_one_scheduler, and pion::single_service_scheduler.

List of all members.

Public Member Functions

 multi_thread_scheduler (void)
 constructs a new single_service_scheduler
virtual ~multi_thread_scheduler ()
 virtual destructor

Protected Types

typedef std::vector
< boost::shared_ptr
< boost::thread > > 
ThreadPool
 typedef for a pool of worker threads

Protected Member Functions

virtual void stop_threads (void)
 stops all threads used to perform work
virtual void finish_threads (void)
 finishes all threads used to perform work

Protected Attributes

ThreadPool m_thread_pool
 pool of threads used to perform work

Detailed Description

multi_thread_scheduler: uses a pool of threads to perform work

Definition at line 199 of file scheduler.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/response_8hpp_source.html0000644000372000001440000006240612314121440022513 0ustar robertousers pion: include/pion/http/response.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser_1_1error__category__t-members.html0000644000372000001440000000434312314121441031423 0ustar robertousers pion: Member List

pion::spdy::parser::error_category_t Member List

This is the complete list of members for pion::spdy::parser::error_category_t, including all inherited members.
message(int ev) const (defined in pion::spdy::parser::error_category_t)pion::spdy::parser::error_category_t [inline]
name() const BOOST_SYSTEM_NOEXCEPT (defined in pion::spdy::parser::error_category_t)pion::spdy::parser::error_category_t [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x62.html0000644000372000001440000001155712314121441021127 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- b -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__not__found.html0000644000372000001440000000520112314121441026262 0ustar robertousers pion: pion::error::plugin_not_found Class Reference

pion::error::plugin_not_found Class Reference

exception thrown if a plugin cannot be found More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin cannot be found

Definition at line 181 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/timer_8hpp_source.html0000644000372000001440000001320312314121441021765 0ustar robertousers pion: include/pion/tcp/timer.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x74.html0000644000372000001440000001411612314121441021124 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- t -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6c.html0000644000372000001440000001331412314121441021201 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- l -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1read__file-members.html0000644000372000001440000000662112314121441026123 0ustar robertousers pion: Member List

pion::error::read_file Member List

This is the complete list of members for pion::error::read_file, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1admin__rights-members.html0000644000372000001440000000541312314121441025145 0ustar robertousers pion: Member List

pion::admin_rights Member List

This is the complete list of members for pion::admin_rights, including all inherited members.
admin_rights(bool use_log=true)pion::admin_rights
release(void)pion::admin_rights
run_as_group(const std::string &group_name)pion::admin_rights [static]
run_as_user(const std::string &user_name)pion::admin_rights [static]
~admin_rights()pion::admin_rights [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/plugin__service_8hpp_source.html0000644000372000001440000003031112314121440024020 0ustar robertousers pion: include/pion/http/plugin_service.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/writer_8hpp_source.html0000644000372000001440000006625412314121441022177 0ustar robertousers pion: include/pion/http/writer.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/auth_8hpp_source.html0000644000372000001440000003105612314121440021613 0ustar robertousers pion: include/pion/http/auth.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x7e.html0000644000372000001440000002021212314121441021177 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- ~ -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1spdy_1_1spdy__control__frame__info.html0000644000372000001440000001001612314121441030021 0ustar robertousers pion: pion::spdy::spdy_control_frame_info Struct Reference

pion::spdy::spdy_control_frame_info Struct Reference

This structure will be tied to each SPDY frame. More...

#include <types.hpp>

List of all members.

Public Attributes

bool control_bit
boost::uint16_t version
boost::uint16_t type
boost::uint8_t flags
boost::uint32_t length

Detailed Description

This structure will be tied to each SPDY frame.

Definition at line 48 of file types.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_echo_service_8hpp_source.html0000644000372000001440000001027712314121441023452 0ustar robertousers pion: services/EchoService.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/basic__auth_8hpp_source.html0000644000372000001440000001506612314121440023116 0ustar robertousers pion: include/pion/http/basic_auth.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__config-members.html0000644000372000001440000000662412314121441026267 0ustar robertousers pion: Member List

pion::error::bad_config Member List

This is the complete list of members for pion::error::bad_config, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x63.html0000644000372000001440000002625112314121441021125 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- c -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1basic__auth-members.html0000644000372000001440000002132512314121441026137 0ustar robertousers pion: Member List

pion::http::basic_auth Member List

This is the complete list of members for pion::http::basic_auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
basic_auth(user_manager_ptr userManager, const std::string &realm="PION")pion::http::basic_auth
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::basic_auth [virtual]
handle_unauthorized(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)pion::http::basic_auth [protected]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
parse_authorization(std::string const &authorization, std::string &credentials)pion::http::basic_auth [protected, static]
parse_credentials(std::string const &credentials, std::string &username, std::string &password)pion::http::basic_auth [protected, static]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::basic_auth [virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]
~basic_auth()pion::http::basic_auth [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1http_1_1message_1_1receive__error__t.html0000644000372000001440000000670412314121441030152 0ustar robertousers pion: pion::http::message::receive_error_t Struct Reference

pion::http::message::receive_error_t Struct Reference

data type for library errors returned during receive() operations More...

#include <message.hpp>

List of all members.

Public Member Functions

virtual const char * name () const BOOST_SYSTEM_NOEXCEPT
virtual std::string message (int ev) const

Detailed Description

data type for library errors returned during receive() operations

Definition at line 61 of file message.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/request_8hpp_source.html0000644000372000001440000006346012314121440022346 0ustar robertousers pion: include/pion/http/request.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1basic__auth.html0000644000372000001440000003723612314121441024517 0ustar robertousers pion: pion::http::basic_auth Class Reference

pion::http::basic_auth Class Reference

#include <basic_auth.hpp>

Inherits pion::http::auth.

List of all members.

Public Member Functions

 basic_auth (user_manager_ptr userManager, const std::string &realm="PION")
 default constructor
virtual ~basic_auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
virtual void set_option (const std::string &name, const std::string &value)

Protected Member Functions

void handle_unauthorized (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)

Static Protected Member Functions

static bool parse_authorization (std::string const &authorization, std::string &credentials)
static bool parse_credentials (std::string const &credentials, std::string &username, std::string &password)

Detailed Description

basic_auth: a base class for handling HTTP Authentication and session management in accordance with RFC 2617 http://tools.ietf.org/html/rfc2617

Definition at line 26 of file basic_auth.hpp.


Member Function Documentation

bool pion::http::basic_auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implements pion::http::auth.

Definition at line 35 of file http_basic_auth.cpp.

References handle_unauthorized(), pion::http::auth::m_user_manager, pion::http::auth::need_authentication(), parse_authorization(), and parse_credentials().

void pion::http::basic_auth::handle_unauthorized ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [protected]

used to send responses when access to resource is not authorized

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 133 of file http_basic_auth.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

Referenced by handle_request().

bool pion::http::basic_auth::parse_authorization ( std::string const &  authorization,
std::string &  credentials 
) [static, protected]

extracts base64 user credentials from authorization string

Parameters:
authorization value of the HEADER_AUTHORIZATION

Definition at line 104 of file http_basic_auth.cpp.

Referenced by handle_request().

bool pion::http::basic_auth::parse_credentials ( std::string const &  credentials,
std::string &  username,
std::string &  password 
) [static, protected]

parse base64 credentials and extract username/password

Definition at line 114 of file http_basic_auth.cpp.

References pion::algorithm::base64_decode().

Referenced by handle_request().

void pion::http::basic_auth::set_option ( const std::string &  name,
const std::string &  value 
) [virtual]

sets a configuration option Valid options:

  • "domain" - name of authentication domain
Parameters:
name the name of the option to change
value the value of the option

Reimplemented from pion::http::auth.

Definition at line 96 of file http_basic_auth.cpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1process_1_1config__type-members.html0000644000372000001440000000505112314121441027257 0ustar robertousers pion: Member List

pion::process::config_type Member List

This is the complete list of members for pion::process::config_type, including all inherited members.
config_type()pion::process::config_type [inline]
shutdown_condpion::process::config_type
shutdown_mutexpion::process::config_type
shutdown_nowpion::process::config_type

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x66.html0000644000372000001440000002164612314121441021133 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- f -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1server.html0000644000372000001440000013312212314121441023553 0ustar robertousers pion: pion::http::server Class Reference

pion::http::server Class Reference

#include <server.hpp>

Inherits pion::tcp::server.

Inherited by pion::http::plugin_server.

List of all members.

Public Types

typedef boost::function2< void,
http::request_ptr
&, tcp::connection_ptr & > 
request_handler_t
 type of function that is used to handle requests
typedef boost::function3< void,
http::request_ptr
&, tcp::connection_ptr
&, const std::string & > 
error_handler_t
 handler for requests that result in "500 Server Error"

Public Member Functions

virtual ~server ()
 default destructor
 server (const unsigned int tcp_port=0)
 server (const boost::asio::ip::tcp::endpoint &endpoint)
 server (scheduler &sched, const unsigned int tcp_port=0)
 server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
void add_resource (const std::string &resource, request_handler_t request_handler)
void remove_resource (const std::string &resource)
void add_redirect (const std::string &requested_resource, const std::string &new_resource)
void set_bad_request_handler (request_handler_t h)
 sets the function that handles bad HTTP requests
void set_not_found_handler (request_handler_t h)
 sets the function that handles requests which match no other web services
void set_error_handler (error_handler_t h)
 sets the function that handles requests which match no other web services
virtual void clear (void)
 clears the collection of resources recognized by the HTTP server
void set_authentication (http::auth_ptr auth)
void set_max_content_length (std::size_t n)
 sets the maximum length for HTTP request payload content

Static Public Member Functions

static std::string strip_trailing_slash (const std::string &str)
static void handle_bad_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
static void handle_not_found_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)
static void handle_server_error (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)
static void handle_forbidden_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg)
static void handle_method_not_allowed (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="")

Protected Member Functions

virtual void handle_connection (tcp::connection_ptr &tcp_conn)
virtual void handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec)
virtual bool find_request_handler (const std::string &resource, request_handler_t &request_handler) const

Detailed Description

server: a server that handles HTTP connections

Definition at line 36 of file server.hpp.


Constructor & Destructor Documentation

pion::http::server::server ( const unsigned int  tcp_port = 0  )  [inline, explicit]

creates a new server object

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Reimplemented from pion::tcp::server.

Definition at line 58 of file server.hpp.

pion::http::server::server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [inline, explicit]

creates a new server object

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented from pion::tcp::server.

Definition at line 73 of file server.hpp.

pion::http::server::server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [inline, explicit]

creates a new server object

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Reimplemented from pion::tcp::server.

Definition at line 89 of file server.hpp.

pion::http::server::server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [inline]

creates a new server object

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented from pion::tcp::server.

Definition at line 105 of file server.hpp.


Member Function Documentation

void pion::http::server::add_redirect ( const std::string &  requested_resource,
const std::string &  new_resource 
)

adds a new resource redirection to the HTTP server

Parameters:
requested_resource the resource name or uri-stem that will be redirected
new_resource the resource that requested_resource will be redirected to

Definition at line 177 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

void pion::http::server::add_resource ( const std::string &  resource,
request_handler_t  request_handler 
)

adds a new web service to the HTTP server

Parameters:
resource the resource name or uri-stem to bind to the handler
request_handler function used to handle requests to the resource

Definition at line 160 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

Referenced by pion::http::plugin_server::add_service(), and pion::http::plugin_server::load_service().

bool pion::http::server::find_request_handler ( const std::string &  resource,
request_handler_t request_handler 
) const [protected, virtual]

searches for the appropriate request handler to use for a given resource

Parameters:
resource the name of the resource to search for
request_handler function that can handle requests for this resource

Definition at line 134 of file http_server.cpp.

Referenced by handle_request().

void pion::http::server::handle_bad_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [static]

used to send responses when a bad HTTP request is made

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 187 of file http_server.cpp.

References pion::http::response_writer::create(), and pion::tcp::connection::finish().

void pion::http::server::handle_connection ( tcp::connection_ptr &  tcp_conn  )  [protected, virtual]

handles a new TCP connection

Parameters:
tcp_conn the new TCP connection to handle

Reimplemented from pion::tcp::server.

Definition at line 29 of file http_server.cpp.

References pion::http::request_reader::create(), and handle_request().

void pion::http::server::handle_forbidden_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  error_msg 
) [static]

used to send responses when a request is forbidden

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
error_msg message that explains what went wrong

Definition at line 250 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_method_not_allowed ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  allowed_methods = "" 
) [static]

used to send responses when a method is not allowed

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
allowed_methods optional comma separated list of allowed methods

Definition at line 277 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_not_found_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [static]

used to send responses when no web services can handle the request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Definition at line 205 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const boost::system::error_code &  ec 
) [protected, virtual]

handles a new HTTP request

Parameters:
http_request_ptr the HTTP request to handle
tcp_conn TCP connection containing a new request
ec error_code contains additional information for parsing errors

Definition at line 38 of file http_server.cpp.

References find_request_handler(), pion::http::parser::get_error_category(), pion::tcp::server::get_port(), pion::tcp::server::m_logger, and strip_trailing_slash().

Referenced by handle_connection().

void pion::http::server::handle_server_error ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn,
const std::string &  error_msg 
) [static]

used to send responses when a server error occurs

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
error_msg message that explains what went wrong

Definition at line 227 of file http_server.cpp.

References pion::http::response_writer::create(), pion::tcp::connection::finish(), and pion::algorithm::xml_encode().

void pion::http::server::remove_resource ( const std::string &  resource  ) 

removes a web service from the HTTP server

Parameters:
resource the resource name or uri-stem to remove

Definition at line 169 of file http_server.cpp.

References pion::tcp::server::m_logger, and strip_trailing_slash().

void pion::http::server::set_authentication ( http::auth_ptr  auth  )  [inline]

sets the handler object for authentication verification processing

Definition at line 221 of file server.hpp.

Referenced by pion::http::plugin_server::load_service_config().

static std::string pion::http::server::strip_trailing_slash ( const std::string &  str  )  [inline, static]

The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tab_b.gif0000644000372000001440000000004312314121440017173 0ustar robertousersGIF89a,D;pion-5.0.6+dfsg.orig/doc/html/spdy__parser_8cpp_source.html0000644000372000001440000015145712314121441023350 0ustar robertousers pion: src/spdy_parser.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_allow_nothing_service-members.html0000644000372000001440000001176012314121441031125 0ustar robertousers pion: Member List

pion::plugins::AllowNothingService Member List

This is the complete list of members for pion::plugins::AllowNothingService, including all inherited members.
AllowNothingService(void) (defined in pion::plugins::AllowNothingService)pion::plugins::AllowNothingService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::AllowNothingService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~AllowNothingService() (defined in pion::plugins::AllowNothingService)pion::plugins::AllowNothingService [inline]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1process.html0000644000372000001440000001444012314121441022364 0ustar robertousers pion: pion::process Class Reference

pion::process Class Reference

#include <process.hpp>

List of all members.

Classes

struct  config_type
 data type for static/global process configuration information More...

Public Member Functions

 process (void)
 default constructor

Static Public Member Functions

static void shutdown (void)
 signals the shutdown condition
static void wait_for_shutdown (void)
 blocks until the shutdown condition has been signaled
static void initialize (void)
 sets up basic signal handling for the process
static void daemonize (void)
 fork process and run as a background daemon

Static Protected Member Functions

static config_typeget_config (void)
 returns a singleton instance of config_type

Detailed Description

process: class for managing process/service related functions

Definition at line 37 of file process.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1open__plugin-members.html0000644000372000001440000000662712314121441026536 0ustar robertousers pion: Member List

pion::error::open_plugin Member List

This is the complete list of members for pion::error::open_plugin, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response__reader-members.html0000644000372000001440000007677112314121441027234 0ustar robertousers pion: Member List

pion::http::response_reader Member List

This is the complete list of members for pion::http::response_reader, including all inherited members.
bytes_available(void) const pion::http::parser [inline]
check_premature_eof(http::message &http_msg)pion::http::parser [inline]
compute_msg_status(http::message &http_msg, bool msg_parsed_ok)pion::http::parser [protected, static]
consume_bytes(const boost::system::error_code &read_error, std::size_t bytes_read)pion::http::reader [protected]
consume_bytes(void)pion::http::reader [protected]
consume_content(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
consume_content_as_next_chunk(http::message::chunk_cache_t &chunk_buffers)pion::http::parser [protected]
COOKIE_NAME_MAXpion::http::parser [protected, static]
COOKIE_VALUE_MAXpion::http::parser [protected, static]
create(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_reader [inline, static]
create_error_category(void)pion::http::parser [protected, static]
DEFAULT_CONTENT_MAXpion::http::parser [static]
eof(void) const pion::http::parser [inline]
ERROR_CHUNK_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_NAME_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_HEADER_VALUE_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_INVALID_CONTENT_LENGTH enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_METHOD_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_CHUNK_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_HEADER_DATA enum value (defined in pion::http::parser)pion::http::parser
ERROR_MISSING_TOO_MUCH_CONTENT enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_QUERY_SIZE enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_STATUS_EMPTY enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_URI_SIZE enum value (defined in pion::http::parser)pion::http::parser
error_value_t enum namepion::http::parser
ERROR_VERSION_CHAR enum value (defined in pion::http::parser)pion::http::parser
ERROR_VERSION_EMPTY enum value (defined in pion::http::parser)pion::http::parser
finish(http::message &http_msg) const pion::http::parser
finish_header_parsing(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
finished_handler_t typedefpion::http::response_reader
finished_parsing_headers(const boost::system::error_code &ec)pion::http::response_reader [inline, protected, virtual]
finished_reading(const boost::system::error_code &ec)pion::http::response_reader [inline, protected, virtual]
gcount(void) const pion::http::parser [inline]
get_connection(void)pion::http::reader [inline]
get_content_bytes_read(void) const pion::http::parser [inline]
get_error_category(void)pion::http::parser [inline, static]
get_logger(void)pion::http::parser [inline]
get_max_content_length(void) const pion::http::parser [inline]
get_message(void)pion::http::response_reader [inline, protected, virtual]
get_parse_headers_only(void)pion::http::parser [inline]
get_raw_headers(void) const pion::http::parser [inline]
get_save_raw_headers(void) const pion::http::parser [inline]
get_total_bytes_read(void) const pion::http::parser [inline]
HEADER_NAME_MAXpion::http::parser [protected, static]
HEADER_VALUE_MAXpion::http::parser [protected, static]
is_char(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_control(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_cookie_attribute(const std::string &name, bool set_cookie_header) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_hex_digit(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
is_parsing_request(void) const pion::http::parser [inline]
is_parsing_response(void) const pion::http::parser [inline]
is_special(int c) (defined in pion::http::parser)pion::http::parser [inline, protected, static]
load_read_pos(const char *&read_ptr, const char *&read_end_ptr) const pion::http::parser [inline]
m_finishedpion::http::response_reader [protected]
m_http_msgpion::http::response_reader [protected]
m_is_requestpion::http::parser [protected]
m_loggerpion::http::parser [mutable, protected]
m_parsed_headerspion::http::response_reader [protected]
m_read_end_ptrpion::http::parser [protected]
m_read_ptrpion::http::parser [protected]
METHOD_MAXpion::http::parser [protected, static]
parse(http::message &http_msg, boost::system::error_code &ec)pion::http::parser
parse_chunks(http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec)pion::http::parser [protected]
parse_cookie_header(ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header)pion::http::parser [static]
parse_cookie_header(ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header)pion::http::parser [inline, static]
parse_forwarded_for(const std::string &header, std::string &public_ip)pion::http::parser [static]
parse_headers(http::message &http_msg, boost::system::error_code &ec)pion::http::parser [protected]
parse_headers_only(bool b=true)pion::http::parser [inline]
parse_missing_data(http::message &http_msg, std::size_t len, boost::system::error_code &ec)pion::http::parser
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_multipart_form_data(ihash_multimap &dict, const std::string &content_type, const std::string &form_data)pion::http::parser [inline, static]
parse_uri(const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const char *ptr, const std::size_t len)pion::http::parser [static]
parse_url_encoded(ihash_multimap &dict, const std::string &query)pion::http::parser [inline, static]
parser(const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX)pion::http::parser [inline]
payload_handler_t typedefpion::http::parser
QUERY_NAME_MAXpion::http::parser [protected, static]
QUERY_STRING_MAXpion::http::parser [protected, static]
QUERY_VALUE_MAXpion::http::parser [protected, static]
read_bytes(void)pion::http::response_reader [inline, protected, virtual]
reader(const bool is_request, tcp::connection_ptr &tcp_conn)pion::http::reader [inline, protected]
receive(void)pion::http::reader
reset(void)pion::http::parser [inline]
reset_max_content_length(void)pion::http::parser [inline]
RESOURCE_MAXpion::http::parser [protected, static]
response_reader(tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)pion::http::response_reader [inline, protected]
set_error(boost::system::error_code &ec, error_value_t ev)pion::http::parser [inline, protected, static]
set_headers_parsed_callback(finished_handler_t &h)pion::http::response_reader [inline]
set_logger(logger log_ptr)pion::http::parser [inline]
set_max_content_length(std::size_t n)pion::http::parser [inline]
set_payload_handler(payload_handler_t &h)pion::http::parser [inline]
set_read_buffer(const char *ptr, size_t len)pion::http::parser [inline]
set_save_raw_headers(bool b)pion::http::parser [inline]
set_timeout(boost::uint32_t seconds)pion::http::reader [inline]
skip_header_parsing(http::message &http_msg)pion::http::parser [inline]
STATUS_MESSAGE_MAXpion::http::parser [protected, static]
update_message_with_header_data(http::message &http_msg) const pion::http::parser [protected]
~parser()pion::http::parser [inline, virtual]
~reader() (defined in pion::http::reader)pion::http::reader [inline, virtual]
~response_reader() (defined in pion::http::response_reader)pion::http::response_reader [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tcp_2server_8hpp_source.html0000644000372000001440000004722212314121440023112 0ustar robertousers pion: include/pion/tcp/server.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1logger.html0000644000372000001440000000577612314121441022420 0ustar robertousers pion: pion::logger Struct Reference

pion::logger Struct Reference

List of all members.

Public Member Functions

 logger (int)
 operator bool () const

Static Public Member Functions

static void shutdown ()

Detailed Description

Definition at line 199 of file logger.hpp.


The documentation for this struct was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1plugin__missing__symbol.html0000644000372000001440000000527112314121441027334 0ustar robertousers pion: pion::error::plugin_missing_symbol Class Reference

pion::error::plugin_missing_symbol Class Reference

exception thrown if a plugin is missing a required symbol More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if a plugin is missing a required symbol

Definition at line 195 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1process-members.html0000644000372000001440000000616612314121441024022 0ustar robertousers pion: Member List

pion::process Member List

This is the complete list of members for pion::process, including all inherited members.
daemonize(void)pion::process [static]
get_config(void)pion::process [inline, protected, static]
initialize(void)pion::process [static]
process(void)pion::process [inline]
shutdown(void)pion::process [static]
wait_for_shutdown(void)pion::process [static]
~process() (defined in pion::process)pion::process [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1message_1_1content__buffer__t.html0000644000372000001440000002036112314121441030076 0ustar robertousers pion: pion::http::message::content_buffer_t Class Reference

pion::http::message::content_buffer_t Class Reference

a simple helper class used to manage a fixed-size payload content buffer More...

#include <message.hpp>

List of all members.

Public Member Functions

 ~content_buffer_t ()
 simple destructor
 content_buffer_t ()
 default constructor
 content_buffer_t (const content_buffer_t &buf)
 copy constructor
content_buffer_toperator= (const content_buffer_t &buf)
 assignment operator
bool is_empty () const
 returns true if buffer is empty
std::size_t size () const
 returns size in bytes
const char * get () const
 returns const pointer to data
char * get ()
 returns mutable pointer to data
void resize (std::size_t len)
 changes the size of the content buffer
void clear ()
 clears the content buffer

Detailed Description

a simple helper class used to manage a fixed-size payload content buffer

Definition at line 492 of file message.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request__writer-members.html0000644000372000001440000002555212314121441027127 0ustar robertousers pion: Member List

pion::http::request_writer Member List

This is the complete list of members for pion::http::request_writer, including all inherited members.
bind_to_write_handler(void)pion::http::request_writer [inline, protected, virtual]
clear(void)pion::http::writer [inline]
create(tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t())pion::http::request_writer [inline, static]
create(tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t())pion::http::request_writer [inline, static]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
get_request(void)pion::http::request_writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::http::request_writer [inline, protected, virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)pion::http::request_writer [inline, protected, virtual]
request_writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::request_writer [inline, protected]
request_writer(tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler)pion::http::request_writer [inline, protected]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~request_writer()pion::http::request_writer [inline, virtual]
~writer()pion::http::writer [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__manager_1_1map__type.html0000644000372000001440000000614412314121441026375 0ustar robertousers pion: pion::plugin_manager< PluginType >::map_type Class Reference

pion::plugin_manager< PluginType >::map_type Class Reference

data type that maps identifiers to plug-in objects More...

#include <plugin_manager.hpp>

Inherits std::map< std::string, std::pair< PluginType *, plugin_ptr< PluginType > > >.

List of all members.

Public Member Functions

void clear (void)

Detailed Description

template<typename PluginType>
class pion::plugin_manager< PluginType >::map_type

data type that maps identifiers to plug-in objects

Definition at line 168 of file plugin_manager.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_file_service-members.html0000644000372000001440000001726112314121441027202 0ustar robertousers pion: Member List

pion::plugins::FileService Member List

This is the complete list of members for pion::plugins::FileService, including all inherited members.
addCacheEntry(const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder)pion::plugins::FileService [protected]
CacheMap typedefpion::plugins::FileService [protected]
FileService(void) (defined in pion::plugins::FileService)pion::plugins::FileService
findMIMEType(const std::string &file_name)pion::plugins::FileService [protected, static]
get_logger(void)pion::plugins::FileService [inline]
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
m_loggerpion::plugins::FileService [protected]
MIMETypeMap typedefpion::plugins::FileService [protected]
operator()(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)pion::plugins::FileService [virtual]
plugin_service(void)pion::http::plugin_service [inline]
scanDirectory(const boost::filesystem::path &dir_path)pion::plugins::FileService [protected]
sendNotFoundResponse(pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) (defined in pion::plugins::FileService)pion::plugins::FileService [protected]
set_logger(logger log_ptr)pion::plugins::FileService [inline]
set_option(const std::string &name, const std::string &value)pion::plugins::FileService [virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::plugins::FileService [virtual]
stop(void)pion::plugins::FileService [virtual]
~FileService() (defined in pion::plugins::FileService)pion::plugins::FileService [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__manager-members.html0000644000372000001440000001750012314121441025465 0ustar robertousers pion: Member List

pion::plugin_manager< PluginType > Member List

This is the complete list of members for pion::plugin_manager< PluginType >, including all inherited members.
add(const std::string &plugin_id, PluginType *plugin_object_ptr)pion::plugin_manager< PluginType > [inline]
clear(void)pion::plugin_manager< PluginType > [inline]
clone(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
empty(void) const pion::plugin_manager< PluginType > [inline]
find(const std::string &resource)pion::plugin_manager< PluginType > [inline]
get(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
get(const std::string &plugin_id) const pion::plugin_manager< PluginType > [inline]
get_lib_ptr(const std::string &plugin_id) const pion::plugin_manager< PluginType > [inline]
get_statistic(PluginStatFunction stat_func) const pion::plugin_manager< PluginType > [inline]
get_statistic(const std::string &plugin_id, PluginStatFunction stat_func) const pion::plugin_manager< PluginType > [inline]
load(const std::string &plugin_id, const std::string &plugin_type)pion::plugin_manager< PluginType > [inline]
m_plugin_mappion::plugin_manager< PluginType > [protected]
m_plugin_mutexpion::plugin_manager< PluginType > [mutable, protected]
plugin_manager(void)pion::plugin_manager< PluginType > [inline]
PluginRunFunction typedefpion::plugin_manager< PluginType >
PluginStatFunction typedefpion::plugin_manager< PluginType >
remove(const std::string &plugin_id)pion::plugin_manager< PluginType > [inline]
replace(const std::string &plugin_id, PluginType *plugin_ptr)pion::plugin_manager< PluginType > [inline]
run(PluginRunFunction run_func)pion::plugin_manager< PluginType > [inline]
run(const std::string &plugin_id, PluginRunFunction run_func)pion::plugin_manager< PluginType > [inline]
~plugin_manager()pion::plugin_manager< PluginType > [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tabs.css0000644000372000001440000000346412314121440017112 0ustar robertousers/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : 80%; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs #MSearchBox { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : 80%; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.navpath { background : none; border : none; border-bottom : 1px solid #84B0C7; text-align : center; margin : 2px; padding : 2px; } pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1request.html0000644000372000001440000005076612314121441023751 0ustar robertousers pion: pion::http::request Class Reference

pion::http::request Class Reference

#include <request.hpp>

Inherits pion::http::message.

List of all members.

Public Member Functions

 request (const std::string &resource)
 request (void)
 constructs a new request object (default constructor)
virtual ~request ()
 virtual destructor
virtual void clear (void)
 clears all request data
virtual bool is_content_length_implied (void) const
 the content length of the message can never be implied for requests
const std::string & get_method (void) const
 returns the request method (i.e. GET, POST, PUT)
const std::string & get_resource (void) const
 returns the resource uri-stem to be delivered (possibly the result of a redirect)
const std::string & get_original_resource (void) const
 returns the resource uri-stem originally requested
const std::string & get_query_string (void) const
 returns the uri-query or query string requested
const std::string & get_query (const std::string &key) const
 returns a value for the query key if any are defined; otherwise, an empty string
ihash_multimap & get_queries (void)
 returns the query parameters
bool has_query (const std::string &key) const
 returns true if at least one value for the query key is defined
void set_method (const std::string &str)
 sets the HTTP request method (i.e. GET, POST, PUT)
void set_resource (const std::string &str)
 sets the resource or uri-stem originally requested
void change_resource (const std::string &str)
 changes the resource or uri-stem to be delivered (called as the result of a redirect)
void set_query_string (const std::string &str)
 sets the uri-query or query string requested
void add_query (const std::string &key, const std::string &value)
 adds a value for the query key
void change_query (const std::string &key, const std::string &value)
 changes the value of a query key
void delete_query (const std::string &key)
 removes all values for a query key
void use_query_params_for_query_string (void)
 use the query parameters to build a query string for the request
void use_query_params_for_post_content (void)
 use the query parameters to build POST content for the request
void set_content (const std::string &value)
 add content (for POST) from string
void set_content (const char *value, size_t size)
void set_user (user_ptr user)
 sets the user record for HTTP request after authentication
user_ptr get_user () const
 get the user record for HTTP request after authentication

Protected Member Functions

virtual void update_first_line (void) const
 updates the string containing the first line for the HTTP message
virtual void append_cookie_headers (void)
 appends HTTP headers for any cookies defined by the http::message

Detailed Description

request: container for HTTP request information

Definition at line 26 of file request.hpp.


Constructor & Destructor Documentation

pion::http::request::request ( const std::string &  resource  )  [inline]

constructs a new request object

Parameters:
resource the HTTP resource to request

Definition at line 36 of file request.hpp.


Member Function Documentation

void pion::http::request::set_content ( const char *  value,
size_t  size 
) [inline]

add content (for POST) from buffer of given size does nothing if the buffer is invalid or the buffer size is zero

Definition at line 148 of file request.hpp.

References pion::http::message::create_content_buffer(), and pion::http::message::set_content_length().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1writer.html0000644000372000001440000010130112314121441023553 0ustar robertousers pion: pion::http::writer Class Reference

pion::http::writer Class Reference

#include <writer.hpp>

Inherited by pion::http::request_writer, and pion::http::response_writer.

List of all members.

Classes

class  binary_cache_t
 used to cache binary data included within the payload content

Public Member Functions

virtual ~writer ()
 default destructor
void clear (void)
 clears out all of the memory buffers used to cache payload content data
template<typename T >
void write (const T &data)
void write (std::ostream &(*iomanip)(std::ostream &))
void write (const void *data, size_t length)
void write_no_copy (const std::string &data)
void write_no_copy (void *data, size_t length)
void send (void)
template<typename SendHandler >
void send (SendHandler send_handler)
template<typename SendHandler >
void send_chunk (SendHandler send_handler)
template<typename SendHandler >
void send_final_chunk (SendHandler send_handler)
void send_final_chunk (void)
tcp::connection_ptr & get_connection (void)
 returns a shared pointer to the TCP connection
size_t get_content_length (void) const
 returns the length of the payload content (in bytes)
void supports_chunked_messages (bool b)
 sets whether or not the client supports chunked messages
bool supports_chunked_messages () const
 returns true if the client supports chunked messages
bool sending_chunked_message () const
 returns true if we are sending a chunked message to the client
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use

Protected Types

typedef boost::function1< void,
const
boost::system::error_code & > 
finished_handler_t
 function called after the HTTP message has been sent
typedef boost::function2< void,
const
boost::system::error_code
&, std::size_t > 
write_handler_t
 data type for a function that handles write operations

Protected Member Functions

 writer (tcp::connection_ptr &tcp_conn, finished_handler_t handler)
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)=0
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)=0
virtual write_handler_t bind_to_write_handler (void)=0
 returns a function bound to writer::handle_write()
void finished_writing (const boost::system::error_code &ec)
 called after we have finished sending the HTTP message

Detailed Description

writer: used to asynchronously send HTTP messages

Definition at line 34 of file writer.hpp.


Constructor & Destructor Documentation

pion::http::writer::writer ( tcp::connection_ptr &  tcp_conn,
finished_handler_t  handler 
) [inline, protected]

protected constructor: only derived classes may create objects

Parameters:
tcp_conn TCP connection used to send the message
handler function called after the request has been sent

Definition at line 52 of file writer.hpp.


Member Function Documentation

virtual void pion::http::writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [protected, pure virtual]

called after the message is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implemented in pion::http::request_writer, and pion::http::response_writer.

virtual void pion::http::writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [protected, pure virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implemented in pion::http::request_writer, and pion::http::response_writer.

template<typename SendHandler >
void pion::http::writer::send ( SendHandler  send_handler  )  [inline]

Sends all data buffered as a single HTTP message (without chunking). Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the message has been sent to the client. Your callback function must end the connection by calling connection::finish().

Definition at line 180 of file writer.hpp.

void pion::http::writer::send ( void   )  [inline]

Sends all data buffered as a single HTTP message (without chunking). Following a call to this function, it is not thread safe to use your reference to the writer object.

Definition at line 166 of file writer.hpp.

template<typename SendHandler >
void pion::http::writer::send_chunk ( SendHandler  send_handler  )  [inline]

Sends all data buffered as a single HTTP chunk. Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the chunk has been sent to the client. Your callback function must end by calling one of send_chunk() or send_final_chunk(). Also, be sure to clear() the writer before writing data to it.

Definition at line 195 of file writer.hpp.

void pion::http::writer::send_final_chunk ( void   )  [inline]

Sends all data buffered (if any) and also sends the final HTTP chunk. This function (either overloaded version) must be called following any calls to send_chunk(). Following a call to this function, it is not thread safe to use your reference to the writer object.

Definition at line 230 of file writer.hpp.

template<typename SendHandler >
void pion::http::writer::send_final_chunk ( SendHandler  send_handler  )  [inline]

Sends all data buffered (if any) and also sends the final HTTP chunk. This function (either overloaded version) must be called following any calls to send_chunk(). Following a call to this function, it is not thread safe to use your reference to the writer object until the send_handler has been called.

Parameters:
send_handler function that is called after the message has been sent to the client. Your callback function must end the connection by calling connection::finish().

Definition at line 218 of file writer.hpp.

void pion::http::writer::write ( const void *  data,
size_t  length 
) [inline]

write binary payload content

Parameters:
data points to the binary data to append to the payload content
length the length, in bytes, of the binary data

Definition at line 122 of file writer.hpp.

template<typename T >
void pion::http::writer::write ( const T &  data  )  [inline]

write text (non-binary) payload content

Parameters:
data the data to append to the payload content

Definition at line 106 of file writer.hpp.

void pion::http::writer::write_no_copy ( void *  data,
size_t  length 
) [inline]

write binary payload content; the data written is not copied, and therefore must persist until the message has finished sending

Parameters:
data points to the binary data to append to the payload content
length the length, in bytes, of the binary data

Definition at line 152 of file writer.hpp.

void pion::http::writer::write_no_copy ( const std::string &  data  )  [inline]

write text (non-binary) payload content; the data written is not copied, and therefore must persist until the message has finished sending

Parameters:
data the data to append to the payload content

Definition at line 137 of file writer.hpp.

Referenced by pion::http::request_writer::request_writer().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1stream__buffer-members.html0000644000372000001440000001651212314121441026472 0ustar robertousers pion: Member List

pion::tcp::stream_buffer Member List

This is the complete list of members for pion::tcp::stream_buffer, including all inherited members.
char_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
flush_output(void)pion::tcp::stream_buffer [inline, protected]
get_connection(void)pion::tcp::stream_buffer [inline]
get_connection(void) const pion::tcp::stream_buffer [inline]
int_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
off_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
overflow(int_type c)pion::tcp::stream_buffer [inline, protected, virtual]
pos_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
PUT_BACK_MAX enum value (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
setup_buffers(void)pion::tcp::stream_buffer [inline, protected]
stream_buffer(tcp::connection_ptr &conn_ptr)pion::tcp::stream_buffer [inline, explicit]
stream_buffer(boost::asio::io_service &io_service, const bool ssl_flag=false)pion::tcp::stream_buffer [inline, explicit]
stream_buffer(boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context)pion::tcp::stream_buffer [inline]
sync(void)pion::tcp::stream_buffer [inline, protected, virtual]
traits_type typedef (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
underflow(void)pion::tcp::stream_buffer [inline, protected, virtual]
WRITE_BUFFER_SIZE enum value (defined in pion::tcp::stream_buffer)pion::tcp::stream_buffer
xsgetn(char_type *s, std::streamsize n)pion::tcp::stream_buffer [inline, protected, virtual]
xsputn(const char_type *s, std::streamsize n)pion::tcp::stream_buffer [inline, protected, virtual]
~stream_buffer()pion::tcp::stream_buffer [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response__writer.html0000644000372000001440000005573712314121441025655 0ustar robertousers pion: pion::http::response_writer Class Reference

pion::http::response_writer Class Reference

#include <response_writer.hpp>

Inherits pion::http::writer.

List of all members.

Public Member Functions

virtual ~response_writer ()
 default destructor
http::responseget_response (void)
 returns a non-const reference to the response that will be sent

Static Public Member Functions

static boost::shared_ptr
< response_writer
create (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t())
static boost::shared_ptr
< response_writer
create (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t())

Protected Member Functions

 response_writer (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler)
 response_writer (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler)
virtual void prepare_buffers_for_send (http::message::write_buffers_t &write_buffers)
virtual write_handler_t bind_to_write_handler (void)
 returns a function bound to http::writer::handle_write()
virtual void handle_write (const boost::system::error_code &write_error, std::size_t bytes_written)

Detailed Description

response_writer: used to asynchronously send HTTP responses

Definition at line 31 of file response_writer.hpp.


Constructor & Destructor Documentation

pion::http::response_writer::response_writer ( tcp::connection_ptr &  tcp_conn,
http::response_ptr &  http_response_ptr,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the response
http_response pointer to the response that will be sent
handler function called after the request has been sent

Definition at line 87 of file response_writer.hpp.

pion::http::response_writer::response_writer ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler 
) [inline, protected]

protected constructor restricts creation of objects (use create())

Parameters:
tcp_conn TCP connection used to send the response
http_request the request we are responding to
handler function called after the request has been sent

Definition at line 111 of file response_writer.hpp.


Member Function Documentation

static boost::shared_ptr<response_writer> pion::http::response_writer::create ( tcp::connection_ptr &  tcp_conn,
const http::request http_request,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]

creates new response_writer objects

Parameters:
tcp_conn TCP connection used to send the response
http_request the request we are responding to
handler function called after the request has been sent
Returns:
boost::shared_ptr<response_writer> shared pointer to the new writer object that was created

Definition at line 67 of file response_writer.hpp.

static boost::shared_ptr<response_writer> pion::http::response_writer::create ( tcp::connection_ptr &  tcp_conn,
http::response_ptr &  http_response_ptr,
finished_handler_t  handler = finished_handler_t() 
) [inline, static]
virtual void pion::http::response_writer::handle_write ( const boost::system::error_code &  write_error,
std::size_t  bytes_written 
) [inline, protected, virtual]

called after the response is sent

Parameters:
write_error error status from the last write operation
bytes_written number of bytes sent by the last write operation

Implements pion::http::writer.

Definition at line 147 of file response_writer.hpp.

Referenced by bind_to_write_handler().

virtual void pion::http::response_writer::prepare_buffers_for_send ( http::message::write_buffers_t write_buffers  )  [inline, protected, virtual]

initializes a vector of write buffers with the HTTP message information

Parameters:
write_buffers vector of write buffers to initialize

Implements pion::http::writer.

Definition at line 126 of file response_writer.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1user-members.html0000644000372000001440000001023012314121441023305 0ustar robertousers pion: Member List

pion::user Member List

This is the complete list of members for pion::user, including all inherited members.
get_password() const pion::user [inline]
get_username() const pion::user [inline]
m_passwordpion::user [protected]
m_password_hashpion::user [protected]
m_usernamepion::user [protected]
match_password(const std::string &password) const pion::user [inline, virtual]
set_password(const std::string &password)pion::user [inline, virtual]
set_password_hash(const std::string &password_hash)pion::user [inline, virtual]
user(std::string const &username)pion::user [inline]
user(std::string const &username, std::string const &password)pion::user [inline]
~user()pion::user [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__server_8cpp_source.html0000644000372000001440000011354112314121441023352 0ustar robertousers pion: src/http_server.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file-members.html0000644000372000001440000001777012314121441026501 0ustar robertousers pion: Member List

pion::plugins::DiskFile Member List

This is the complete list of members for pion::plugins::DiskFile, including all inherited members.
appendFilePath(const std::string &p)pion::plugins::DiskFile [inline]
checkUpdated(void)pion::plugins::DiskFile
DiskFile(void)pion::plugins::DiskFile [inline]
DiskFile(const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime)pion::plugins::DiskFile [inline]
DiskFile(const DiskFile &f)pion::plugins::DiskFile [inline]
getFileContent(void)pion::plugins::DiskFile [inline]
getFilePath(void) const pion::plugins::DiskFile [inline]
getFileSize(void) const pion::plugins::DiskFile [inline]
getLastModified(void) const pion::plugins::DiskFile [inline]
getLastModifiedString(void) const pion::plugins::DiskFile [inline]
getMimeType(void) const pion::plugins::DiskFile [inline]
hasFileContent(void) const pion::plugins::DiskFile [inline]
m_file_contentpion::plugins::DiskFile [protected]
m_file_pathpion::plugins::DiskFile [protected]
m_file_sizepion::plugins::DiskFile [protected]
m_last_modifiedpion::plugins::DiskFile [protected]
m_last_modified_stringpion::plugins::DiskFile [protected]
m_mime_typepion::plugins::DiskFile [protected]
read(void)pion::plugins::DiskFile
resetFileContent(unsigned long n=0)pion::plugins::DiskFile [inline]
setFilePath(const boost::filesystem::path &p)pion::plugins::DiskFile [inline]
setMimeType(const std::string &t)pion::plugins::DiskFile [inline]
update(void)pion::plugins::DiskFile

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6e.html0000644000372000001440000000766412314121441021216 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- n -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1logger-members.html0000644000372000001440000000423712314121441024037 0ustar robertousers pion: Member List

pion::logger Member List

This is the complete list of members for pion::logger, including all inherited members.
logger(int) (defined in pion::logger)pion::logger [inline]
operator bool() const (defined in pion::logger)pion::logger [inline]
shutdown() (defined in pion::logger)pion::logger [inline, static]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/spdy__decompressor_8cpp_source.html0000644000372000001440000004265112314121441024554 0ustar robertousers pion: src/spdy_decompressor.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1open__plugin.html0000644000372000001440000000515512314121441025101 0ustar robertousers pion: pion::error::open_plugin Class Reference

pion::error::open_plugin Class Reference

exception thrown if we are unable to open a plugin More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown if we are unable to open a plugin

Definition at line 153 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http_2parser_8hpp_source.html0000644000372000001440000014737512314121440023303 0ustar robertousers pion: include/pion/http/parser.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x71.html0000644000372000001440000001010612314121441021114 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- q -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/piond_8cpp_source.html0000644000372000001440000004402112314121441021753 0ustar robertousers pion: utils/piond.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__message_8cpp_source.html0000644000372000001440000007156512314121441023501 0ustar robertousers pion: src/http_message.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1tcp_1_1server.html0000644000372000001440000007056112314121441023371 0ustar robertousers pion: pion::tcp::server Class Reference

pion::tcp::server Class Reference

#include <server.hpp>

Inherited by HelloServer, and pion::http::server.

List of all members.

Public Member Functions

virtual ~server ()
 default destructor
void start (void)
 starts listening for new connections
void stop (bool wait_until_finished=false)
void join (void)
 the calling thread will sleep until the server has stopped listening for connections
void set_ssl_key_file (const std::string &pem_key_file)
std::size_t get_connections (void) const
 returns the number of active tcp connections
unsigned int get_port (void) const
 returns tcp port number that the server listens for connections on
void set_port (unsigned int p)
 sets tcp port number that the server listens for connections on
boost::asio::ip::address get_address (void) const
 returns IP address that the server listens for connections on
void set_address (const boost::asio::ip::address &addr)
 sets IP address that the server listens for connections on
const
boost::asio::ip::tcp::endpoint & 
get_endpoint (void) const
 returns tcp endpoint that the server listens for connections on
void set_endpoint (const boost::asio::ip::tcp::endpoint &ep)
 sets tcp endpoint that the server listens for connections on
bool get_ssl_flag (void) const
 returns true if the server uses SSL to encrypt connections
void set_ssl_flag (bool b=true)
 sets value of SSL flag (true if the server uses SSL to encrypt connections)
connection::ssl_context_typeget_ssl_context_type (void)
 returns the SSL context for configuration
bool is_listening (void) const
 returns true if the server is listening for connections
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
boost::asio::ip::tcp::acceptor & get_acceptor (void)
 returns mutable reference to the TCP connection acceptor
const
boost::asio::ip::tcp::acceptor & 
get_acceptor (void) const
 returns const reference to the TCP connection acceptor

Protected Member Functions

 server (const unsigned int tcp_port)
 server (const boost::asio::ip::tcp::endpoint &endpoint)
 server (scheduler &sched, const unsigned int tcp_port=0)
 server (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint)
virtual void handle_connection (tcp::connection_ptr &tcp_conn)
virtual void before_starting (void)
 called before the TCP server starts listening for new connections
virtual void after_stopping (void)
 called after the TCP server has stopped listing for new connections
boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work

Protected Attributes

logger m_logger
 primary logging interface used by this class

Detailed Description

tcp::server: a multi-threaded, asynchronous TCP server

Definition at line 32 of file server.hpp.


Constructor & Destructor Documentation

pion::tcp::server::server ( const unsigned int  tcp_port  )  [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
tcp_port port number used to listen for new connections (IPv4)

Reimplemented in pion::http::server.

Definition at line 47 of file tcp_server.cpp.

pion::tcp::server::server ( const boost::asio::ip::tcp::endpoint &  endpoint  )  [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented in pion::http::server.

Definition at line 59 of file tcp_server.cpp.

pion::tcp::server::server ( scheduler sched,
const unsigned int  tcp_port = 0 
) [explicit, protected]

protected constructor so that only derived objects may be created

Parameters:
sched the scheduler that will be used to manage worker threads
tcp_port port number used to listen for new connections (IPv4)

Reimplemented in pion::http::server.

Definition at line 23 of file tcp_server.cpp.

pion::tcp::server::server ( scheduler sched,
const boost::asio::ip::tcp::endpoint &  endpoint 
) [protected]

protected constructor so that only derived objects may be created

Parameters:
sched the scheduler that will be used to manage worker threads
endpoint TCP endpoint used to listen for new connections (see ASIO docs)

Reimplemented in pion::http::server.

Definition at line 35 of file tcp_server.cpp.


Member Function Documentation

virtual void pion::tcp::server::handle_connection ( tcp::connection_ptr &  tcp_conn  )  [inline, protected, virtual]

handles a new TCP connection; derived classes SHOULD override this since the default behavior does nothing

Parameters:
tcp_conn the new TCP connection to handle

Reimplemented in pion::http::server.

Definition at line 144 of file server.hpp.

void pion::tcp::server::set_ssl_key_file ( const std::string &  pem_key_file  ) 

configures server for SSL using a PEM-encoded RSA private key file

Parameters:
pem_key_file name of the file containing a PEM-encoded private key

Definition at line 160 of file tcp_server.cpp.

References set_ssl_flag().

void pion::tcp::server::stop ( bool  wait_until_finished = false  ) 

stops listening for new connections

Parameters:
wait_until_finished if true, blocks until all pending connections have closed

Definition at line 113 of file tcp_server.cpp.

References after_stopping(), pion::tcp::connection::close(), get_port(), m_logger, pion::scheduler::remove_active_user(), and pion::scheduler::sleep().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1directory__not__found-members.html0000644000372000001440000000666012314121441030432 0ustar robertousers pion: Member List

pion::error::directory_not_found Member List

This is the complete list of members for pion::error::directory_not_found, including all inherited members.
exception() (defined in pion::exception)pion::exception [inline]
exception(const std::string &msg) (defined in pion::exception)pion::exception [inline]
exception(const char *const msg) (defined in pion::exception)pion::exception [inline]
m_what_msg (defined in pion::exception)pion::exception [mutable, protected]
set_what_msg(const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const (defined in pion::exception)pion::exception [inline, protected]
what() const (defined in pion::exception)pion::exception [inline, virtual]
~exception() (defined in pion::exception)pion::exception [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__instance__ptr.html0000644000372000001440000002224412314121441025254 0ustar robertousers pion: pion::plugin_instance_ptr< InterfaceClassType > Class Template Reference

pion::plugin_instance_ptr< InterfaceClassType > Class Template Reference

#include <plugin.hpp>

List of all members.

Public Member Functions

 plugin_instance_ptr (void)
 default constructor & destructor
virtual ~plugin_instance_ptr ()
 virtual destructor / may be extended
void reset (void)
 reset the instance pointer
void create (const std::string &plugin_type)
 create a new instance of the given plugin_type
bool empty (void) const
 returns true if pointer is empty
InterfaceClassType * get (void)
 return a raw pointer to the instance
InterfaceClassType & operator* (void)
 return a reference to the instance
const InterfaceClassType & operator* (void) const
 return a const reference to the instance
InterfaceClassType * operator-> (void)
 return a reference to the instance
const InterfaceClassType * operator-> (void) const
 return a const reference to the instance

Protected Attributes

plugin_ptr< InterfaceClassType > m_plugin_ptr
 smart pointer that manages the plugin's dynamic object code
InterfaceClassType * m_instance_ptr
 raw pointer to the plugin instance

Detailed Description

template<typename InterfaceClassType>
class pion::plugin_instance_ptr< InterfaceClassType >

plugin_instance_ptr: smart pointer that manages a plug-in instance

Definition at line 355 of file plugin.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/reader_8hpp_source.html0000644000372000001440000002017012314121440022107 0ustar robertousers pion: include/pion/http/reader.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1test_1_1safe__xml__log__formatter.html0000644000372000001440000003033112314121441027422 0ustar robertousers pion: pion::test::safe_xml_log_formatter Class Reference

pion::test::safe_xml_log_formatter Class Reference

thread-safe version of Boost.Test's xml_log_formatter class More...

#include <unit_test.hpp>

List of all members.

Public Member Functions

 safe_xml_log_formatter ()
 default constructor
virtual ~safe_xml_log_formatter ()
 virtual destructor
virtual void log_start (std::ostream &ostr, boost::unit_test::counter_t test_cases_amount)
 wrapper to flush output for xml_log_formatter::log_start
virtual void log_finish (std::ostream &ostr)
 wrapper to flush output for xml_log_formatter::log_finish
virtual void log_build_info (std::ostream &ostr)
 wrapper to flush output for xml_log_formatter::log_build_info
virtual void test_unit_start (std::ostream &ostr, boost::unit_test::test_unit const &tu)
 wrapper to flush output for xml_log_formatter::test_unit_start
virtual void test_unit_finish (std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed)
 wrapper to flush output for xml_log_formatter::test_unit_finish
virtual void test_unit_skipped (std::ostream &ostr, boost::unit_test::test_unit const &tu)
 wrapper to flush output for xml_log_formatter::test_unit_skipped
virtual void log_exception (std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex)
 wrapper to flush output for xml_log_formatter::log_exception
virtual void log_entry_start (std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let)
 thread-safe wrapper for xml_log_formatter::log_entry_start
virtual void log_entry_value (std::ostream &ostr, boost::unit_test::const_string value)
virtual void log_entry_finish (std::ostream &ostr)

Detailed Description

thread-safe version of Boost.Test's xml_log_formatter class

Definition at line 42 of file unit_test.hpp.


Member Function Documentation

virtual void pion::test::safe_xml_log_formatter::log_entry_finish ( std::ostream &  ostr  )  [inline, virtual]

thread-safe wrapper for xml_log_formatter::log_entry_finish assumes the current thread has control via call to log_entry_start()

Definition at line 168 of file unit_test.hpp.

virtual void pion::test::safe_xml_log_formatter::log_entry_value ( std::ostream &  ostr,
boost::unit_test::const_string  value 
) [inline, virtual]

thread-safe wrapper for xml_log_formatter::log_entry_value ensures that an entry is in progress

Definition at line 157 of file unit_test.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__cookie__auth_8cpp_source.html0000644000372000001440000007457512314121441024512 0ustar robertousers pion: src/http_cookie_auth.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/request__writer_8hpp_source.html0000644000372000001440000004210712314121440024074 0ustar robertousers pion: include/pion/http/request_writer.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/response__writer_8hpp_source.html0000644000372000001440000003710112314121440024240 0ustar robertousers pion: include/pion/http/response_writer.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__parser_8cpp_source.html0000644000372000001440000062536312314121441023352 0ustar robertousers pion: src/http_parser.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1scheduler-members.html0000644000372000001440000002431212314121441024313 0ustar robertousers pion: Member List

pion::scheduler Member List

This is the complete list of members for pion::scheduler, including all inherited members.
add_active_user(void)pion::scheduler
DEFAULT_NUM_THREADSpion::scheduler [protected, static]
finish_services(void)pion::scheduler [inline, protected, virtual]
finish_threads(void)pion::scheduler [inline, protected, virtual]
get_io_service(void)=0pion::scheduler [pure virtual]
get_logger(void)pion::scheduler [inline]
get_num_threads(void) const pion::scheduler [inline]
get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [protected, static]
is_running(void) const pion::scheduler [inline]
join(void)pion::scheduler
keep_running(boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)pion::scheduler
KEEP_RUNNING_TIMER_SECONDSpion::scheduler [protected, static]
m_active_userspion::scheduler [protected]
m_is_runningpion::scheduler [protected]
m_loggerpion::scheduler [protected]
m_mutexpion::scheduler [protected]
m_no_more_active_userspion::scheduler [protected]
m_num_threadspion::scheduler [protected]
m_scheduler_has_stoppedpion::scheduler [protected]
MICROSEC_IN_SECONDpion::scheduler [protected, static]
NSEC_IN_SECONDpion::scheduler [protected, static]
post(boost::function0< void > work_func)pion::scheduler [inline, virtual]
process_service_work(boost::asio::io_service &service)pion::scheduler
remove_active_user(void)pion::scheduler
scheduler(void)pion::scheduler [inline]
set_logger(logger log_ptr)pion::scheduler [inline]
set_num_threads(const boost::uint32_t n)pion::scheduler [inline]
shutdown(void)pion::scheduler [virtual]
sleep(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
sleep(ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)pion::scheduler [inline, static]
startup(void)pion::scheduler [inline, virtual]
stop_services(void)pion::scheduler [inline, protected, virtual]
stop_threads(void)pion::scheduler [inline, protected, virtual]
~scheduler()pion::scheduler [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x74.html0000644000372000001440000001361412314121441022141 0ustar robertousers pion: Class Members - Functions
 

- t -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1response-members.html0000644000372000001440000013222012314121441025531 0ustar robertousers pion: Member List

pion::http::response Member List

This is the complete list of members for pion::http::response, including all inherited members.
add_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
add_header(const std::string &key, const std::string &value)pion::http::message [inline]
append_cookie_headers(void)pion::http::response [inline, protected, virtual]
append_headers(write_buffers_t &write_buffers)pion::http::message [inline, protected]
change_cookie(const std::string &key, const std::string &value)pion::http::message [inline]
change_header(const std::string &key, const std::string &value)pion::http::message [inline]
change_value(DictionaryType &dict, const std::string &key, const std::string &value)pion::http::message [inline, protected, static]
check_keep_alive(void) const pion::http::message [inline]
chunk_cache_t typedefpion::http::message
clear(void)pion::http::response [inline, virtual]
clear_content(void)pion::http::message [inline]
clear_first_line(void) const pion::http::message [inline, protected]
concatenate_chunks(void)pion::http::message
CONTENT_TYPE_HTML (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_MULTIPART_FORM_DATA (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_TEXT (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_URLENCODED (defined in pion::http::types)pion::http::types [static]
CONTENT_TYPE_XML (defined in pion::http::types)pion::http::types [static]
COOKIE_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
create_content_buffer(void)pion::http::message [inline]
data_status_t enum namepion::http::message
delete_cookie(const std::string &name)pion::http::response [inline]
delete_cookie(const std::string &name, const std::string &path)pion::http::response [inline]
delete_header(const std::string &key)pion::http::message [inline]
delete_value(DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_chunk_cache(void)pion::http::message [inline]
get_chunks_supported(void) const pion::http::message [inline]
get_content(void)pion::http::message [inline]
get_content(void) const pion::http::message [inline]
get_content_buffer_size() const pion::http::message [inline]
get_content_length(void) const pion::http::message [inline]
get_cookie(const std::string &key) const pion::http::message [inline]
get_cookies(void)pion::http::message [inline]
get_date_string(const time_t t)pion::http::types [static]
get_first_line(void) const pion::http::message [inline]
get_header(const std::string &key) const pion::http::message [inline]
get_headers(void)pion::http::message [inline]
get_remote_ip(void)pion::http::message [inline]
get_status() const pion::http::message [inline]
get_status_code(void) const pion::http::response [inline]
get_status_message(void) const pion::http::response [inline]
get_value(const DictionaryType &dict, const std::string &key)pion::http::message [inline, protected, static]
get_version_major(void) const pion::http::message [inline]
get_version_minor(void) const pion::http::message [inline]
get_version_string(void) const pion::http::message [inline]
has_cookie(const std::string &key) const pion::http::message [inline]
has_data_after_missing_packets() const pion::http::message [inline]
has_header(const std::string &key) const pion::http::message [inline]
has_missing_packets() const pion::http::message [inline]
HEADER_AUTHORIZATION (defined in pion::http::types)pion::http::types [static]
HEADER_CLIENT_IP (defined in pion::http::types)pion::http::types [static]
HEADER_CONNECTION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_DISPOSITION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LENGTH (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_CONTENT_TYPE (defined in pion::http::types)pion::http::types [static]
HEADER_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_HOST (defined in pion::http::types)pion::http::types [static]
HEADER_IF_MODIFIED_SINCE (defined in pion::http::types)pion::http::types [static]
HEADER_LAST_MODIFIED (defined in pion::http::types)pion::http::types [static]
HEADER_LOCATION (defined in pion::http::types)pion::http::types [static]
HEADER_NAME_VALUE_DELIMITER (defined in pion::http::types)pion::http::types [static]
HEADER_REFERER (defined in pion::http::types)pion::http::types [static]
HEADER_SET_COOKIE (defined in pion::http::types)pion::http::types [static]
HEADER_TRANSFER_ENCODING (defined in pion::http::types)pion::http::types [static]
HEADER_USER_AGENT (defined in pion::http::types)pion::http::types [static]
HEADER_X_FORWARDED_FOR (defined in pion::http::types)pion::http::types [static]
is_chunked(void) const pion::http::message [inline]
is_content_buffer_allocated() const pion::http::message [inline]
is_content_length_implied(void) const pion::http::response [inline, virtual]
is_valid(void) const pion::http::message [inline]
m_first_linepion::http::message [mutable, protected]
make_query_string(const ihash_multimap &query_params)pion::http::types [static]
make_set_cookie_header(const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0)pion::http::types [static]
message(void)pion::http::message [inline]
message(const message &http_msg)pion::http::message [inline]
operator=(const message &http_msg)pion::http::message [inline]
prepare_buffers_for_send(write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks)pion::http::message [inline]
prepare_headers_for_send(const bool keep_alive, const bool using_chunks)pion::http::message [inline, protected]
read(std::istream &in, boost::system::error_code &ec, parser &http_parser)pion::http::message
read(std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser)pion::http::message
receive(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1))pion::http::message
REQUEST_METHOD_DELETE (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_GET (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_HEAD (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_POST (defined in pion::http::types)pion::http::types [static]
REQUEST_METHOD_PUT (defined in pion::http::types)pion::http::types [static]
response(const http::request &http_request_ptr)pion::http::response [inline]
response(const std::string &request_method)pion::http::response [inline]
response(const response &http_response)pion::http::response [inline]
response(void)pion::http::response [inline]
RESPONSE_CODE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_CODE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_ACCEPTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_BAD_REQUEST (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CONTINUE (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_CREATED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FORBIDDEN (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_METHOD_NOT_ALLOWED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NO_CONTENT (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_FOUND (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_IMPLEMENTED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_NOT_MODIFIED (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_OK (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_SERVER_ERROR (defined in pion::http::types)pion::http::types [static]
RESPONSE_MESSAGE_UNAUTHORIZED (defined in pion::http::types)pion::http::types [static]
send(tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false)pion::http::message
set_chunks_supported(bool b)pion::http::message [inline]
set_content(const std::string &content)pion::http::message [inline]
set_content_length(size_t n)pion::http::message [inline]
set_content_type(const std::string &type)pion::http::message [inline]
set_cookie(const std::string &name, const std::string &value)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const std::string &path)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age)pion::http::response [inline]
set_cookie(const std::string &name, const std::string &value, const unsigned long max_age)pion::http::response [inline]
set_data_after_missing_packet(bool newVal) (defined in pion::http::message)pion::http::message [inline]
set_do_not_send_content_length(void)pion::http::message [inline]
set_is_valid(bool b=true)pion::http::message [inline]
set_last_modified(const unsigned long t)pion::http::response [inline]
set_missing_packets(bool newVal)pion::http::message [inline]
set_remote_ip(const boost::asio::ip::address &ip)pion::http::message [inline]
set_status(data_status_t newVal) (defined in pion::http::message)pion::http::message [inline]
set_status_code(unsigned int n)pion::http::response [inline]
set_status_message(const std::string &msg)pion::http::response [inline]
set_version_major(const boost::uint16_t n)pion::http::message [inline]
set_version_minor(const boost::uint16_t n)pion::http::message [inline]
STATUS_NONE enum value (defined in pion::http::message)pion::http::message
STATUS_OK enum value (defined in pion::http::message)pion::http::message
STATUS_PARTIAL enum value (defined in pion::http::message)pion::http::message
STATUS_TRUNCATED enum value (defined in pion::http::message)pion::http::message
STRING_CRLF (defined in pion::http::types)pion::http::types [static]
STRING_EMPTY (defined in pion::http::types)pion::http::types [static]
STRING_HTTP_VERSION (defined in pion::http::types)pion::http::types [static]
update_content_length_using_header(void)pion::http::message [inline]
update_first_line(void) const pion::http::response [inline, protected, virtual]
update_request_info(const http::request &http_request)pion::http::response [inline]
update_transfer_encoding_using_header(void)pion::http::message [inline]
write(std::ostream &out, boost::system::error_code &ec, bool headers_only=false)pion::http::message
write_buffers_t typedefpion::http::message
~message()pion::http::message [inline, virtual]
~response()pion::http::response [inline, virtual]
~types()pion::http::types [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__service-members.html0000644000372000001440000001040212314121441027045 0ustar robertousers pion: Member List

pion::http::plugin_service Member List

This is the complete list of members for pion::http::plugin_service, including all inherited members.
get_relative_resource(const std::string &resource_requested) const pion::http::plugin_service [inline]
get_resource(void) const pion::http::plugin_service [inline]
operator()(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0pion::http::plugin_service [pure virtual]
plugin_service(void)pion::http::plugin_service [inline]
set_option(const std::string &name, const std::string &value)pion::http::plugin_service [inline, virtual]
set_resource(const std::string &str)pion::http::plugin_service [inline]
start(void)pion::http::plugin_service [inline, virtual]
stop(void)pion::http::plugin_service [inline, virtual]
~plugin_service()pion::http::plugin_service [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x72.html0000644000372000001440000002172112314121441021122 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- r -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/config_8hpp_source.html0000644000372000001440000001731212314121440022116 0ustar robertousers pion: include/pion/config.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/_allow_nothing_service_8cpp_source.html0000644000372000001440000001474212314121441025374 0ustar robertousers pion: services/AllowNothingService.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_cookie_service.html0000644000372000001440000000666412314121441026111 0ustar robertousers pion: pion::plugins::CookieService Class Reference

pion::plugins::CookieService Class Reference

#include <CookieService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for CookieService

Detailed Description

CookieService: web service that displays and updates cookies

Definition at line 22 of file CookieService.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1scheduler.html0000644000372000001440000007470412314121441022675 0ustar robertousers pion: pion::scheduler Class Reference

pion::scheduler Class Reference

#include <scheduler.hpp>

Inherited by pion::multi_thread_scheduler.

List of all members.

Public Member Functions

 scheduler (void)
 constructs a new scheduler
virtual ~scheduler ()
 virtual destructor
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).
virtual void shutdown (void)
 Stops the thread scheduler (this is called automatically when the program exits).
void join (void)
 the calling thread will sleep until the scheduler has stopped
void add_active_user (void)
void remove_active_user (void)
 unregisters an active user with the thread scheduler
bool is_running (void) const
 returns true if the scheduler is running
void set_num_threads (const boost::uint32_t n)
 sets the number of threads to be used (these are shared by all servers)
boost::uint32_t get_num_threads (void) const
 returns the number of threads currently in use
void set_logger (logger log_ptr)
 sets the logger to be used
logger get_logger (void)
 returns the logger currently in use
virtual boost::asio::io_service & get_io_service (void)=0
 returns an async I/O service used to schedule work
virtual void post (boost::function0< void > work_func)
void keep_running (boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer)
void process_service_work (boost::asio::io_service &service)
 processes work passed to the asio service & handles uncaught exceptions

Static Public Member Functions

static void sleep (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)
template<typename ConditionType , typename LockType >
static void sleep (ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void stop_threads (void)
 stops all threads used to perform work
virtual void finish_services (void)
 finishes all services used to schedule work
virtual void finish_threads (void)
 finishes all threads used to perform work

Static Protected Member Functions

static boost::system_time get_wakeup_time (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec)

Protected Attributes

boost::mutex m_mutex
 mutex to make class thread-safe
logger m_logger
 primary logging interface used by this class
boost::condition m_no_more_active_users
 condition triggered when there are no more active users
boost::condition m_scheduler_has_stopped
 condition triggered when the scheduler has stopped
boost::uint32_t m_num_threads
 total number of worker threads in the pool
boost::uint32_t m_active_users
 the scheduler will not shutdown until there are no more active users
bool m_is_running
 true if the thread scheduler is running

Static Protected Attributes

static const boost::uint32_t DEFAULT_NUM_THREADS = 8
 default number of worker threads in the thread pool
static const boost::uint32_t NSEC_IN_SECOND = 1000000000
 number of nanoseconds in one full second (10 ^ 9)
static const boost::uint32_t MICROSEC_IN_SECOND = 1000000
 number of microseconds in one full second (10 ^ 6)
static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS = 5
 number of seconds a timer should wait for to keep the IO services running

Detailed Description

scheduler: combines Boost.ASIO with a managed thread pool for scheduling

Definition at line 34 of file scheduler.hpp.


Member Function Documentation

void pion::scheduler::add_active_user ( void   ) 

registers an active user with the thread scheduler. Shutdown of the scheduler is deferred until there are no more active users. This ensures that any work queued will not reference destructed objects

Definition at line 88 of file scheduler.cpp.

References m_active_users, m_is_running, m_mutex, and startup().

Referenced by pion::tcp::server::start().

boost::system_time pion::scheduler::get_wakeup_time ( boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [static, protected]

calculates a wakeup time in boost::system_time format

Parameters:
sleep_sec number of seconds to sleep for
sleep_nsec number of nanoseconds to sleep for
Returns:
boost::system_time time to wake up from sleep

Definition at line 102 of file scheduler.cpp.

void pion::scheduler::keep_running ( boost::asio::io_service &  my_service,
boost::asio::deadline_timer &  my_timer 
)

thread function used to keep the io_service running

Parameters:
my_service IO service used to re-schedule keep_running()
my_timer deadline timer used to keep the IO service active while running

Definition at line 77 of file scheduler.cpp.

References KEEP_RUNNING_TIMER_SECONDS, and m_is_running.

Referenced by pion::one_to_one_scheduler::startup(), and pion::single_service_scheduler::startup().

virtual void pion::scheduler::post ( boost::function0< void >  work_func  )  [inline, virtual]

schedules work to be performed by one of the pooled threads

Parameters:
work_func work function to be executed

Definition at line 88 of file scheduler.hpp.

template<typename ConditionType , typename LockType >
static void pion::scheduler::sleep ( ConditionType &  wakeup_condition,
LockType &  wakeup_lock,
boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [inline, static]

puts the current thread to sleep for a specific period of time, or until a wakeup condition is signaled

Parameters:
wakeup_condition if signaled, the condition will wakeup the thread early
wakeup_lock scoped lock protecting the wakeup condition
sleep_sec number of entire seconds to sleep for
sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second)

Definition at line 122 of file scheduler.hpp.

static void pion::scheduler::sleep ( boost::uint32_t  sleep_sec,
boost::uint32_t  sleep_nsec 
) [inline, static]

puts the current thread to sleep for a specific period of time

Parameters:
sleep_sec number of entire seconds to sleep for
sleep_nsec number of nanoseconds to sleep for (10^-9 in 1 second)

Definition at line 107 of file scheduler.hpp.

Referenced by pion::tcp::server::stop().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/doxygen.png0000644000372000001440000000240112314121440017620 0ustar robertousersPNG  IHDRd-ok>gAMAOX2tEXtSoftwareAdobe ImageReadyqe<]PLTEǾ"&ﶻޠ{ԍ눙נED9hg]_X<@:#mhU1tRNSvIDATxbC: d#h` @X",***LK.], X@t b @BD6%""  % B:Hf@ RPy"K`\PbC(!II!h(!Cąl!0[X\J\$TM(>a$S @ Ш@R.$LJBRAG1 (FPhhT%!`&q%u P    CT$B|Wl!B`R$( @A%%@,(%$RPmB U`1IYB  99\1 yCCCf"[N'=TGȒl8^K5<SRɤ%@@  b1qAXH&BR y nP4A j>  t!+(.WQA2MU܂ `1%`19F< 3cZ`e!\ D+. 83!lYYA -6EJV @XXX 4 @86`RdB4I " "@xrʌHA`f ȰC"XV0C b@2H ȓ p)!( 04)(%R $Tʀbb,s@7 Ѱ?f֗\PIx!I"Ȉ3 QYt^^gv- }>WJOAV`$&#88\FF SFJ$ƀƊ 4 - Hf ?5 k1d, ."FˀI"4Hgx|fm)))9. aMD& X@t b @%DK.], X@t b @d`ɽSOIENDB`pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1auth.html0000644000372000001440000006547012314121441023220 0ustar robertousers pion: pion::http::auth Class Reference

pion::http::auth Class Reference

#include <auth.hpp>

Inherited by pion::http::basic_auth, and pion::http::cookie_auth.

List of all members.

Public Member Functions

 auth (user_manager_ptr userManager)
 default constructor
virtual ~auth ()
 virtual destructor
virtual bool handle_request (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0
virtual void set_option (const std::string &name, const std::string &value)
void add_restrict (const std::string &resource)
void add_permit (const std::string &resource)
virtual bool add_user (std::string const &username, std::string const &password)
virtual bool update_user (std::string const &username, std::string const &password)
virtual bool remove_user (std::string const &username)
virtual user_ptr get_user (std::string const &username)

Protected Types

typedef std::set< std::string > resource_set_type
 data type for a set of resources to be authenticated
typedef std::map< std::string,
std::pair
< boost::posix_time::ptime,
user_ptr > > 
user_cache_type
 data type used to map authentication credentials to user objects

Protected Member Functions

bool need_authentication (http::request_ptr const &http_request_ptr) const
bool find_resource (const resource_set_type &resource_set, const std::string &resource) const
void set_logger (logger log_ptr)
 sets the logger to be used

Protected Attributes

logger m_logger
 primary logging interface used by this class
user_manager_ptr m_user_manager
 container used to manager user objects
resource_set_type m_restrict_list
 collection of resources that require authentication
resource_set_type m_white_list
 collection of resources that do NOT require authentication
boost::mutex m_resource_mutex
 mutex used to protect access to the resources

Detailed Description

auth: a base class for handling HTTP Authentication and session management

Definition at line 34 of file auth.hpp.


Member Function Documentation

void pion::http::auth::add_permit ( const std::string &  resource  ) 

adds a resource that does NOT require authentication

Parameters:
resource the resource name or uri-stem that does not require authentication

Definition at line 29 of file http_auth.cpp.

References m_logger, m_resource_mutex, m_white_list, and pion::http::server::strip_trailing_slash().

void pion::http::auth::add_restrict ( const std::string &  resource  ) 

adds a resource that requires authentication

Parameters:
resource the resource name or uri-stem that requires authentication

Definition at line 21 of file http_auth.cpp.

References m_logger, m_resource_mutex, m_restrict_list, and pion::http::server::strip_trailing_slash().

virtual bool pion::http::auth::add_user ( std::string const &  username,
std::string const &  password 
) [inline, virtual]

used to add a new user

@ return false if user with such name already exists

Definition at line 91 of file auth.hpp.

bool pion::http::auth::find_resource ( const resource_set_type resource_set,
const std::string &  resource 
) const [protected]

tries to find a resource in a given collection

Parameters:
resource_set the collection of resource to look in
resource the resource to look for
Returns:
true if the resource was found

Definition at line 65 of file http_auth.cpp.

Referenced by need_authentication().

virtual user_ptr pion::http::auth::get_user ( std::string const &  username  )  [inline, virtual]

Used to locate user object by username

Definition at line 116 of file auth.hpp.

virtual bool pion::http::auth::handle_request ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [pure virtual]

attempts to validate authentication of a new HTTP request. If request valid, pointer to user identity object (if any) will be preserved in the request and return "true". If request not authenticated, appropriate response is sent over tcp_conn and return "false";

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request
Returns:
true if request valid and user identity inserted into request

Implemented in pion::http::basic_auth, and pion::http::cookie_auth.

bool pion::http::auth::need_authentication ( http::request_ptr const &  http_request_ptr  )  const [protected]

check if given HTTP request requires authentication

Parameters:
http_request_ptr the HTTP request to check

Definition at line 37 of file http_auth.cpp.

References find_resource(), m_resource_mutex, m_restrict_list, m_user_manager, m_white_list, and pion::http::server::strip_trailing_slash().

Referenced by pion::http::cookie_auth::handle_request(), and pion::http::basic_auth::handle_request().

virtual bool pion::http::auth::remove_user ( std::string const &  username  )  [inline, virtual]

used to remove given user

Returns:
false if no user with such username

Definition at line 109 of file auth.hpp.

virtual void pion::http::auth::set_option ( const std::string &  name,
const std::string &  value 
) [inline, virtual]

sets a configuration option

Parameters:
name the name of the option to change
value the value of the option

Reimplemented in pion::http::basic_auth, and pion::http::cookie_auth.

Definition at line 68 of file auth.hpp.

virtual bool pion::http::auth::update_user ( std::string const &  username,
std::string const &  password 
) [inline, virtual]

update password for given user

Returns:
false if user with such a name doesn't exist

Definition at line 100 of file auth.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/connection_8hpp_source.html0000644000372000001440000017427012314121441023020 0ustar robertousers pion: include/pion/tcp/connection.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1auth-members.html0000644000372000001440000001601112314121441024633 0ustar robertousers pion: Member List

pion::http::auth Member List

This is the complete list of members for pion::http::auth, including all inherited members.
add_permit(const std::string &resource)pion::http::auth
add_restrict(const std::string &resource)pion::http::auth
add_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
auth(user_manager_ptr userManager)pion::http::auth [inline]
find_resource(const resource_set_type &resource_set, const std::string &resource) const pion::http::auth [protected]
get_user(std::string const &username)pion::http::auth [inline, virtual]
handle_request(http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0pion::http::auth [pure virtual]
m_loggerpion::http::auth [mutable, protected]
m_resource_mutexpion::http::auth [mutable, protected]
m_restrict_listpion::http::auth [protected]
m_user_managerpion::http::auth [protected]
m_white_listpion::http::auth [protected]
need_authentication(http::request_ptr const &http_request_ptr) const pion::http::auth [protected]
remove_user(std::string const &username)pion::http::auth [inline, virtual]
resource_set_type typedefpion::http::auth [protected]
set_logger(logger log_ptr)pion::http::auth [inline, protected]
set_option(const std::string &name, const std::string &value)pion::http::auth [inline, virtual]
update_user(std::string const &username, std::string const &password)pion::http::auth [inline, virtual]
user_cache_type typedefpion::http::auth [protected]
~auth()pion::http::auth [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1writer-members.html0000644000372000001440000002126512314121441025215 0ustar robertousers pion: Member List

pion::http::writer Member List

This is the complete list of members for pion::http::writer, including all inherited members.
bind_to_write_handler(void)=0pion::http::writer [protected, pure virtual]
clear(void)pion::http::writer [inline]
finished_handler_t typedefpion::http::writer [protected]
finished_writing(const boost::system::error_code &ec)pion::http::writer [inline, protected]
get_connection(void)pion::http::writer [inline]
get_content_length(void) const pion::http::writer [inline]
get_logger(void)pion::http::writer [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)=0pion::http::writer [protected, pure virtual]
prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)=0pion::http::writer [protected, pure virtual]
send(void)pion::http::writer [inline]
send(SendHandler send_handler)pion::http::writer [inline]
send_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(SendHandler send_handler)pion::http::writer [inline]
send_final_chunk(void)pion::http::writer [inline]
sending_chunked_message() const pion::http::writer [inline]
set_logger(logger log_ptr)pion::http::writer [inline]
supports_chunked_messages(bool b)pion::http::writer [inline]
supports_chunked_messages() const pion::http::writer [inline]
write(const T &data)pion::http::writer [inline]
write(std::ostream &(*iomanip)(std::ostream &)) (defined in pion::http::writer)pion::http::writer [inline]
write(const void *data, size_t length)pion::http::writer [inline]
write_handler_t typedefpion::http::writer [protected]
write_no_copy(const std::string &data)pion::http::writer [inline]
write_no_copy(void *data, size_t length)pion::http::writer [inline]
writer(tcp::connection_ptr &tcp_conn, finished_handler_t handler)pion::http::writer [inline, protected]
~writer()pion::http::writer [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_disk_file_sender-members.html0000644000372000001440000001026112314121441030025 0ustar robertousers pion: Member List

pion::plugins::DiskFileSender Member List

This is the complete list of members for pion::plugins::DiskFileSender, including all inherited members.
create(DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0)pion::plugins::DiskFileSender [inline, static]
DiskFileSender(DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size)pion::plugins::DiskFileSender [protected]
get_logger(void)pion::plugins::DiskFileSender [inline]
handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)pion::plugins::DiskFileSender [protected]
m_loggerpion::plugins::DiskFileSender [protected]
send(void)pion::plugins::DiskFileSender
set_logger(logger log_ptr)pion::plugins::DiskFileSender [inline]
~DiskFileSender()pion::plugins::DiskFileSender [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/tcp__server_8cpp_source.html0000644000372000001440000007730512314121441023170 0ustar robertousers pion: src/tcp_server.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/request__reader_8hpp_source.html0000644000372000001440000003652312314121440024027 0ustar robertousers pion: include/pion/http/request_reader.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x78.html0000644000372000001440000001011012314121441021116 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- x -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1parser.html0000644000372000001440000011475312314121441023552 0ustar robertousers pion: pion::spdy::parser Class Reference

pion::spdy::parser Class Reference

#include <parser.hpp>

List of all members.

Classes

class  error_category_t
 class-specific error category More...

Public Types

enum  error_value_t {
  ERROR_INVALID_SPDY_FRAME = 1, ERROR_INVALID_SPDY_VERSION, ERROR_DECOMPRESSION, ERROR_PROTOCOL_ERROR,
  ERROR_INTERNAL_SPDY_ERROR, ERROR_MISSING_HEADER_DATA
}
 

class-specific error code values


Public Member Functions

 parser ()
 constructs a new parser object (default constructor)
 ~parser ()
 destructor
boost::tribool parse (http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)
const char * get_spdy_data_content ()
 Get the pointer to the first character to the spdy data contect.
const char * get_spdy_read_pointer ()
 Get the pointer to the first character to the spdy data contect.

Static Public Member Functions

static spdy_frame_type get_spdy_frame_type (const char *ptr)
static bool is_spdy_control_frame (const char *ptr)
static boost::uint32_t get_control_frame_stream_id (const char *ptr)

Protected Member Functions

void set_read_ptr (const char *ptr)
 resets the read pointer
bool populate_frame (boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers)
void parse_header_payload (boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count)
void parse_spdy_data (boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info)
void parse_spdy_settings_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_rst_stream (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_ping_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_goaway_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
void parse_spdy_window_update_frame (boost::system::error_code &ec, const spdy_control_frame_info &frame)
boost::tribool parse_spdy_frame (boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count)

Static Protected Member Functions

static void create_error_category (void)
 creates the unique parser error_category_t
static error_category_tget_error_category (void)
 returns an instance of parser::error_category_t
static void set_error (boost::system::error_code &ec, error_value_t ev)

Detailed Description

parser : parsers and reads the SPDY frames

Definition at line 36 of file parser.hpp.


Member Function Documentation

boost::uint32_t pion::spdy::parser::get_control_frame_stream_id ( const char *  ptr  )  [static]

get the stream id for the spdy control frame

Returns:
true if it is a control frame else returns false

Definition at line 133 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

spdy_frame_type pion::spdy::parser::get_spdy_frame_type ( const char *  ptr  )  [static]

checks if the frame is spdy frame or not

Returns:
true if it is a frame else returns false

Definition at line 107 of file spdy_parser.cpp.

bool pion::spdy::parser::is_spdy_control_frame ( const char *  ptr  )  [static]

checks if the frame is spdy control frame or not

Returns:
true if it is a control frame else returns false

Definition at line 71 of file spdy_parser.cpp.

References pion::algorithm::to_uint16().

boost::tribool pion::spdy::parser::parse ( http_protocol_info http_headers,
boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
const char *  packet_ptr,
boost::uint32_t &  length_packet,
boost::uint32_t  current_stream_count 
)

parse a SPDY packet

Returns:
boost::tribool result of parsing: false = SPDY frame has an error, true = finished parsing SPDY frame, indeterminate = not yet finished parsing SPDY frame

Definition at line 57 of file spdy_parser.cpp.

References parse_spdy_frame(), and set_read_ptr().

void pion::spdy::parser::parse_header_payload ( boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
const spdy_control_frame_info frame,
http_protocol_info http_headers,
boost::uint32_t  current_stream_count 
) [protected]

parses an the header payload for SPDY

Definition at line 348 of file spdy_parser.cpp.

References set_error(), pion::algorithm::to_uint16(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_data ( boost::system::error_code &  ec,
const spdy_control_frame_info frame,
boost::uint32_t  stream_id,
http_protocol_info http_info 
) [protected]

parses the data for SPDY

Definition at line 466 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

boost::tribool pion::spdy::parser::parse_spdy_frame ( boost::system::error_code &  ec,
decompressor_ptr &  decompressor,
http_protocol_info http_headers,
boost::uint32_t &  length_packet,
boost::uint32_t  current_stream_count 
) [protected]

parse a SPDY frame (protected implementation)

Returns:
boost::tribool result of parsing: false = SPDY frame has an error, true = finished parsing SPDY frame, indeterminate = not yet finished parsing SPDY frame

There was an error; No need to further parse.

Definition at line 142 of file spdy_parser.cpp.

References parse_header_payload(), parse_spdy_data(), parse_spdy_goaway_frame(), parse_spdy_ping_frame(), parse_spdy_rst_stream(), parse_spdy_settings_frame(), parse_spdy_window_update_frame(), populate_frame(), and set_error().

Referenced by parse().

void pion::spdy::parser::parse_spdy_goaway_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the GoAway Frame for SPDY

Definition at line 534 of file spdy_parser.cpp.

References set_error(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_ping_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the Ping Frame for SPDY

Definition at line 508 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_rst_stream ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the RST stream for SPDY

Definition at line 477 of file spdy_parser.cpp.

References pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_settings_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the Settings Frame for SPDY

Definition at line 528 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

void pion::spdy::parser::parse_spdy_window_update_frame ( boost::system::error_code &  ec,
const spdy_control_frame_info frame 
) [protected]

parses an the WindowUpdate Frame for SPDY

Definition at line 574 of file spdy_parser.cpp.

Referenced by parse_spdy_frame().

bool pion::spdy::parser::populate_frame ( boost::system::error_code &  ec,
spdy_control_frame_info frame,
boost::uint32_t &  length_packet,
boost::uint32_t &  stream_id,
http_protocol_info http_headers 
) [protected]

populates the frame for every spdy packet Returns false if there was an error else returns true

Definition at line 264 of file spdy_parser.cpp.

References set_error(), pion::algorithm::to_uint16(), and pion::algorithm::to_uint32().

Referenced by parse_spdy_frame().

static void pion::spdy::parser::set_error ( boost::system::error_code &  ec,
error_value_t  ev 
) [inline, static, protected]

sets an error code

Parameters:
ec error code variable to define
ev error value to raise

Definition at line 149 of file parser.hpp.

Referenced by parse_header_payload(), parse_spdy_frame(), parse_spdy_goaway_frame(), and populate_frame().


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/cookie__auth_8hpp_source.html0000644000372000001440000002125512314121440023303 0ustar robertousers pion: include/pion/http/cookie_auth.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1spdy_1_1decompressor-members.html0000644000372000001440000000650012314121441026401 0ustar robertousers pion: Member List

pion::spdy::decompressor Member List

This is the complete list of members for pion::spdy::decompressor, including all inherited members.
data_size_t enum namepion::spdy::decompressor
decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length)pion::spdy::decompressor
decompressor()pion::spdy::decompressor
MAX_UNCOMPRESSED_DATA_BUF_SIZE enum valuepion::spdy::decompressor
spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length)pion::spdy::decompressor [protected]
~decompressor()pion::spdy::decompressor

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x75.html0000644000372000001440000001460612314121441021131 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- u -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x6d.html0000644000372000001440000003012212314121441021176 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- m -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/annotated.html0000644000372000001440000003510312314121441020306 0ustar robertousers pion: Class List

Class List

Here are the classes, structs, unions and interfaces with brief descriptions:
pion::spdy::_http_protocol_info_tThis structure contains the HTTP Protocol information
pion::spdy::_spdy_header_info
pion::admin_rights
pion::algorithm
pion::plugins::AllowNothingService
pion::http::auth
pion::error::bad_argException thrown for an invalid configuration argument or option
pion::error::bad_configException thrown if there is an error parsing a configuration file
pion::error::bad_password_hashException thrown if a bad password hash is provided
pion::http::basic_auth
pion::test::config
pion::process::config_typeData type for static/global process configuration information
pion::tcp::connection
pion::http::message::content_buffer_tSimple helper class used to manage a fixed-size payload content buffer
pion::http::cookie_auth
pion::plugins::CookieService
pion::plugin::data_type
pion::spdy::decompressor
pion::error::directory_not_foundException thrown if a required directory is not found
pion::plugins::DiskFile
pion::plugins::DiskFileSender
pion::error::duplicate_pluginException thrown if we try to add or load a duplicate plugin
pion::plugins::EchoService
pion::http::parser::error_category_tClass-specific error category
pion::spdy::parser::error_category_tClass-specific error category
pion::exception
pion::error::file_not_foundException thrown if a file is not found
pion::plugins::FileService
HelloServerSimple TCP server that just sends "Hello there!" to each connection
pion::plugins::HelloService
pion::iequal_to
pion::ihash
pion::logger
pion::plugins::LogService
pion::plugins::LogServiceAppender
pion::plugin_manager< PluginType >::map_typeData type that maps identifiers to plug-in objects
pion::http::message
pion::multi_thread_scheduler
pion::one_to_one_scheduler
pion::error::open_fileException thrown if we failed to open a file
pion::error::open_pluginException thrown if we are unable to open a plugin
pion::http::parser
pion::spdy::parser
pion::plugin
pion::plugin_instance_ptr< InterfaceClassType >
pion::plugin_manager< PluginType >
pion::error::plugin_missing_symbolException thrown if a plugin is missing a required symbol
pion::error::plugin_not_foundException thrown if a plugin cannot be found
pion::plugin_ptr< InterfaceClassType >
pion::http::plugin_server
pion::http::plugin_service
pion::error::plugin_undefinedException thrown if a plugin has an undefined state
pion::process
pion::error::read_fileException thrown if we failed to read data from a file
pion::http::reader
pion::http::message::receive_error_tData type for library errors returned during receive() operations
pion::http::request
pion::http::request_reader
pion::http::request_writer
pion::http::response
pion::http::response_reader
pion::http::response_writer
pion::test::safe_xml_log_formatterThread-safe version of Boost.Test's xml_log_formatter class
pion::scheduler
pion::tcp::server
pion::http::server
pion::one_to_one_scheduler::service_pair_typeTypedef for a pair object where first is an IO service and second is a deadline timer
pion::single_service_scheduler
pion::spdy::spdy_control_frame_infoThis structure will be tied to each SPDY frame
pion::tcp::stream
pion::tcp::stream_buffer
pion::tcp::timer
pion::http::types
pion::user
pion::user_manager
pion::http::writer

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/process_8cpp_source.html0000644000372000001440000006066512314121441022334 0ustar robertousers pion: src/process.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1error_1_1bad__arg.html0000644000372000001440000000501512314121441024134 0ustar robertousers pion: pion::error::bad_arg Class Reference

pion::error::bad_arg Class Reference

exception thrown for an invalid configuration argument or option More...

#include <error.hpp>

Inherits pion::exception.

List of all members.


Detailed Description

exception thrown for an invalid configuration argument or option

Definition at line 132 of file error.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_0x65.html0000644000372000001440000001134512314121441021125 0ustar robertousers pion: Class Members
Here is a list of all documented class members with links to the class documentation for each member:

- e -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugin__manager_1_1map__type-members.html0000644000372000001440000000513412314121441030023 0ustar robertousers pion: Member List

pion::plugin_manager< PluginType >::map_type Member List

This is the complete list of members for pion::plugin_manager< PluginType >::map_type, including all inherited members.
clear(void) (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline]
map_type(void) (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline]
~map_type() (defined in pion::plugin_manager< PluginType >::map_type)pion::plugin_manager< PluginType >::map_type [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1iequal__to-members.html0000644000372000001440000000340512314121441024675 0ustar robertousers pion: Member List

pion::iequal_to Member List

This is the complete list of members for pion::iequal_to, including all inherited members.
operator()(std::string const &x, std::string const &y) const (defined in pion::iequal_to)pion::iequal_to [inline]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1user__manager.html0000644000372000001440000004424212314121441023520 0ustar robertousers pion: pion::user_manager Class Reference

pion::user_manager Class Reference

#include <user.hpp>

List of all members.

Public Member Functions

 user_manager (void)
 construct a new user_manager object
virtual ~user_manager ()
 virtual destructor
bool empty (void) const
 returns true if no users are defined
virtual bool add_user (const std::string &username, const std::string &password)
virtual bool update_user (const std::string &username, const std::string &password)
virtual bool add_user_hash (const std::string &username, const std::string &password_hash)
virtual bool update_user_hash (const std::string &username, const std::string &password_hash)
virtual bool remove_user (const std::string &username)
virtual user_ptr get_user (const std::string &username)
virtual user_ptr get_user (const std::string &username, const std::string &password)

Protected Types

typedef std::map< std::string,
user_ptr > 
user_map_t
 data type for a map of usernames to user objects

Protected Attributes

boost::mutex m_mutex
 mutex used to protect access to the user list
user_map_t m_users
 user records container

Detailed Description

user_manager base class for user container/manager

Definition at line 143 of file user.hpp.


Member Function Documentation

virtual bool pion::user_manager::add_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

used to add a new user with plaintext password

Parameters:
username name or identifier of the user to add
password plaintext password of the user to add
Returns:
false if user with such a name already exists

Definition at line 168 of file user.hpp.

virtual bool pion::user_manager::add_user_hash ( const std::string &  username,
const std::string &  password_hash 
) [inline, virtual]

used to add a new user with encrypted password

Parameters:
username name or identifier of the user to add
password_hash encrypted password of the user to add
Returns:
false if user with such a name already exists

Definition at line 208 of file user.hpp.

virtual user_ptr pion::user_manager::get_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

Used to locate user object by username and password

Definition at line 270 of file user.hpp.

virtual user_ptr pion::user_manager::get_user ( const std::string &  username  )  [inline, virtual]

Used to locate user object by username

Definition at line 258 of file user.hpp.

virtual bool pion::user_manager::remove_user ( const std::string &  username  )  [inline, virtual]

used to remove given user

Returns:
false if no user with such username

Definition at line 246 of file user.hpp.

virtual bool pion::user_manager::update_user ( const std::string &  username,
const std::string &  password 
) [inline, virtual]

update password for given user

Parameters:
username name or identifier of the user to update
password plaintext password of the user to update
Returns:
false if user with such a name doesn't exist

Definition at line 188 of file user.hpp.

virtual bool pion::user_manager::update_user_hash ( const std::string &  username,
const std::string &  password_hash 
) [inline, virtual]

update password for given user with encrypted password

Parameters:
username name or identifier of the user to update
password_hash encrypted password of the user to update
Returns:
false if user with such a name doesn't exist

Definition at line 229 of file user.hpp.


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1plugins_1_1_hello_service.html0000644000372000001440000000663612314121441025742 0ustar robertousers pion: pion::plugins::HelloService Class Reference

pion::plugins::HelloService Class Reference

#include <HelloService.hpp>

Inherits pion::http::plugin_service.

List of all members.

Public Member Functions

virtual void operator() (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn)
 handles requests for HelloService

Detailed Description

HelloService: web service that responds with "Hello World"

Definition at line 22 of file HelloService.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/logger_8hpp_source.html0000644000372000001440000007742212314121441022141 0ustar robertousers pion: include/pion/logger.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/process_8hpp_source.html0000644000372000001440000002750712314121441022337 0ustar robertousers pion: include/pion/process.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x64.html0000644000372000001440000001245712314121441022144 0ustar robertousers pion: Class Members - Functions
 

- d -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1http_1_1plugin__service.html0000644000372000001440000002760212314121441025427 0ustar robertousers pion: pion::http::plugin_service Class Reference

pion::http::plugin_service Class Reference

#include <plugin_service.hpp>

Inherited by pion::plugins::AllowNothingService, pion::plugins::CookieService, pion::plugins::EchoService, pion::plugins::FileService, pion::plugins::HelloService, and pion::plugins::LogService.

List of all members.

Public Member Functions

 plugin_service (void)
 default constructor
virtual ~plugin_service ()
 virtual destructor
virtual void operator() (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0
virtual void set_option (const std::string &name, const std::string &value)
virtual void start (void)
 called when the web service's server is starting
virtual void stop (void)
 called when the web service's server is stopping
void set_resource (const std::string &str)
 sets the URI stem or resource that is bound to the web service
const std::string & get_resource (void) const
 returns the URI stem or resource that is bound to the web service
std::string get_relative_resource (const std::string &resource_requested) const
 returns the path to the resource requested, relative to the web service's location

Detailed Description

plugin_service: interface class for web services

Definition at line 29 of file plugin_service.hpp.


Member Function Documentation

virtual void pion::http::plugin_service::operator() ( http::request_ptr &  http_request_ptr,
tcp::connection_ptr &  tcp_conn 
) [pure virtual]

attempts to handle a new HTTP request

Parameters:
http_request_ptr the new HTTP request to handle
tcp_conn the TCP connection that has the new request

Implemented in pion::plugins::AllowNothingService, pion::plugins::CookieService, pion::plugins::EchoService, pion::plugins::FileService, pion::plugins::HelloService, and pion::plugins::LogService.

virtual void pion::http::plugin_service::set_option ( const std::string &  name,
const std::string &  value 
) [inline, virtual]

sets a configuration option

Parameters:
name the name of the option to change
value the value of the option

Reimplemented in pion::plugins::FileService.

Definition at line 54 of file plugin_service.hpp.

Referenced by pion::http::plugin_server::set_service_option().


The documentation for this class was generated from the following file:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/functions_func_0x68.html0000644000372000001440000001647112314121441022150 0ustar robertousers pion: Class Members - Functions
 

- h -


Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/http__plugin__server_8cpp_source.html0000644000372000001440000007476212314121441025102 0ustar robertousers pion: src/http_plugin_server.cpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/classpion_1_1one__to__one__scheduler.html0000644000372000001440000002414712314121441025532 0ustar robertousers pion: pion::one_to_one_scheduler Class Reference

pion::one_to_one_scheduler Class Reference

#include <scheduler.hpp>

Inherits pion::multi_thread_scheduler.

List of all members.

Classes

struct  service_pair_type
 typedef for a pair object where first is an IO service and second is a deadline timer More...

Public Member Functions

 one_to_one_scheduler (void)
 constructs a new one_to_one_scheduler
virtual ~one_to_one_scheduler ()
 virtual destructor
virtual boost::asio::io_service & get_io_service (void)
 returns an async I/O service used to schedule work
virtual boost::asio::io_service & get_io_service (boost::uint32_t n)
virtual void startup (void)
 Starts the thread scheduler (this is called automatically when necessary).

Protected Types

typedef std::vector
< boost::shared_ptr
< service_pair_type > > 
service_pool_type
 typedef for a pool of IO services

Protected Member Functions

virtual void stop_services (void)
 stops all services used to schedule work
virtual void finish_services (void)
 finishes all services used to schedule work

Protected Attributes

service_pool_type m_service_pool
 pool of IO services used to schedule work
boost::uint32_t m_next_service
 the next service to use for scheduling work

Detailed Description

one_to_one_scheduler: uses a single IO service for each thread

Definition at line 286 of file scheduler.hpp.


Member Function Documentation

virtual boost::asio::io_service& pion::one_to_one_scheduler::get_io_service ( boost::uint32_t  n  )  [inline, virtual]

returns an async I/O service used to schedule work (provides direct access to avoid locking when possible)

Parameters:
n integer number representing the service object

Definition at line 318 of file scheduler.hpp.


The documentation for this class was generated from the following files:

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/structpion_1_1test_1_1config-members.html0000644000372000001440000000436612314121441025370 0ustar robertousers pion: Member List

pion::test::config Member List

This is the complete list of members for pion::test::config, including all inherited members.
config() (defined in pion::test::config)pion::test::config [inline]
m_test_log_filepion::test::config [static]
~config() (defined in pion::test::config)pion::test::config [inline, virtual]

Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/html/algorithm_8hpp_source.html0000644000372000001440000013254312314121440022643 0ustar robertousers pion: include/pion/algorithm.hpp Source File
Generated on 24 Mar 2014 for pion by  doxygen 1.6.1
pion-5.0.6+dfsg.orig/doc/README.solaris0000644000372000001440000001536212314121350017036 0ustar robertousersSolaris Build Instructions ========================== Preparing the Build Environment: -------------------------------- Pion currently only supports the GCC (g++) compiler when building under Solaris. We plan to add support for the Sun Studio C++ compiler in the near future, after support for it is added to the ASIO library. The easiest way to setup a build environment in Solaris is to download and install the following packages from http://www.sunfreeware.com/: cmake, gcc, zlib, bzip2 and openssl. Make sure that the "make" and "ar" utilities are in your PATH. Normally, these are installed in the /usr/ccs/bin directory, which for some reason is not included in the default PATH. Also, make sure that /usr/local/bin is included in your PATH. Building Boost with ASIO: ------------------------- Please see the README.boost file for instructions. Boost 1.35.0 on Solaris seems to incorrectly detect the presense of the ICU library (for Unicode support), and enables support for it even though the development libraries are not actually installed and available, and contrary to Boost's documentation (which claims incorrectly that it is always disabled by default). Therefore, you will need to explicity disable ICU support when configuring Boost. If you are using the configure script, add the parameter "--without-icu". If you are using bjam, add the parameter "-sHAVE_ICU=0". Boost's build system is currently (as of 1.35.0) unable to detect the linker you are using, and therefore may pass incorrect arguments causing libraries to not be built correctly. This is especially a problem under Solaris if you are using the GCC distribution from SunFreeware.com because it uses the linker bundled with Solaris while Boost assumes the GCC toolset always uses the GCC linker. Luckily, the build system lets you tell it explicitly what linker you are using by modifying your "user-config.jam" file. If you are building Boost using the "configure" script, first run the "configure" command and then modify the "user-config.jam" file that it generates in Boost's root directory (change the existing "using gcc" line). If you are using Boost::Build (bjam), you need to instead modify the "user-config.jam" file in the "tools/build/v2" subdirectory (add the following line within the "GCC configuration" section): using gcc : : g++ : sun ; Installing zlib, bzlib & openssl: --------------------------------- Pion requires zlib, bzlib and openssl for compression and SSL/TLS encryption support, respectively. On Solaris, we recommend that you download and install the packages available on SunFreeware.com. However, you may instead choose to download and install the latest versions from the "Third Party Libraries" page on our website, or from the following sites: http://www.zlib.net http://www.bzip.org http://www.openssl.org Logging frameworks: ------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cxx for logging. Log4cxx requires that you have the Apache Portable Runtime (APR) installed, which is not normally included with Solaris. You can download the latest source code tarballs from the "Third Party Libraries" page on our website, or from the following site: http://apr.apache.org You will need to install both the "apr" and the "apr-util" packages. For each, just download the source and run: # bzip2 -dc apr-.tar.bz2 | tar xvf - # cd apr- # ./configure --prefix=/usr/local --enable-threads --with-apr=/usr/local # make all # make install Next, please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cxx. Then, just run: # bzip2 -dc log4cxx-.tar.bz2 | tar xvf - # cd log4cxx- # ./configure # make all # make install Installing libxml2: ------------------- The Pion Platform requires the libxml2 development library for manipulating configuration files, and other things. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. The libxml2 library is normally pre-installed with the Solaris development tools. If you do not have it already, you should be able to grab the latest source code tarball from the "Third Party Libraries" page on our website, or from the following site: http://www.xmlsoft.org Installing OSSP uuid: --------------------- The Pion Platform requires the OSSP uuid library to generate universally unique identifiers for most platforms, including Solaris. This library is not used by the Pion Network Library, so you may skip this step if you are only building the Network Library. You can download the source code tarball for the uuid library from the "Third Party Libraries" page on our website. After downloading it, just run: # gzip -dc uuid-.tar.gz | tar xvf - # cd uuid- # ./configure # make all # make install Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # cmake . # make To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # gzip -dc pion--.tar.gz | tar xvf - # cd pion-- # ./configure [--with-openssl=/usr/local/ssl] [--with-log4cxx] [--with-yajl] # make all # make install To build and run Pion's unit tests, run "make check" Known problems: --------------- If you're using the gcc compiler distributed at http://www.sunfreeware.com, you may encountered errors about not being able to find the libstdc++ shared library (and others). If this happens, try setting the LD_LIBRARY_PATH variable to include /usr/local/lib/. You should also include the Boost libraries and the logging library (if used) in this path: export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/ssl/lib Solaris includes some libraries, such as bzlib (bzip2) in shared object format located in the /usr/lib directory. Static versions of these are not provided. If you encounter problems while linking static versions of Pion's libraries, it may be because none of the required libraries are available in static format. Try using the "--disable-static" configure script flag to only build Pion's shared object libraries (the static libraries are not required). pion-5.0.6+dfsg.orig/doc/pion-net.tag0000644000372000001440000103753612314121441016742 0ustar robertousers HelloServer class_hello_server.html pion::tcp::server HelloServer class_hello_server.html a7417b37a77beb236800e206faf176179 (const unsigned int tcp_port) virtual void handle_connection class_hello_server.html ad5276a2b43e89bd30ccd117bf76dbb40 (tcp::connection_ptr &tcp_conn) pion::admin_rights classpion_1_1admin__rights.html admin_rights classpion_1_1admin__rights.html abfb9f3aea1e085f4a5a666a98fa36c7c (bool use_log=true) virtual ~admin_rights classpion_1_1admin__rights.html a3dd9a6d85bdeffe1243a25b78e562716 () void release classpion_1_1admin__rights.html a2979c3b20e89e29113a9593d14a563b8 (void) static long run_as_user classpion_1_1admin__rights.html ab8ebba2984ee6610829fbac64c149f06 (const std::string &user_name) static long run_as_group classpion_1_1admin__rights.html ae2b1e96be191af3cf81851cdf2c69e2a (const std::string &group_name) pion::algorithm structpion_1_1algorithm.html static bool base64_decode structpion_1_1algorithm.html ad1700ce7cf8e29bb7600d5729fd4cdad (std::string const &input, std::string &output) static bool base64_encode structpion_1_1algorithm.html ae5f52e52ac349ecf20410f2ad3e257dd (std::string const &input, std::string &output) static std::string url_decode structpion_1_1algorithm.html a440bd54b07a24c80bc939fdb03583721 (const std::string &str) static std::string url_encode structpion_1_1algorithm.html aa4eaedaecac95a638cedf5c4884de1b8 (const std::string &str) static std::string xml_encode structpion_1_1algorithm.html a2177ca0d0f01e6ef6d4d3bceb73d82bb (const std::string &str) static void float_from_bytes structpion_1_1algorithm.html ab3cce74846661c3585ec5f540a99ff07 (long double &value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) static void float_to_bytes structpion_1_1algorithm.html a61872c7ccf75793a16d8ce7961f28842 (long double value, unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) static boost::uint8_t to_uint8 structpion_1_1algorithm.html a79898e00c20439125c68d90248afb2e0 (unsigned char byte) static boost::int8_t to_int8 structpion_1_1algorithm.html afb09388ae577897cd3fac5572c9e4eef (unsigned char byte) static boost::uint8_t to_uint8 structpion_1_1algorithm.html a6088634700c44316b7d6d55e687d65aa (char byte) static boost::int8_t to_int8 structpion_1_1algorithm.html a8a891be43c16371c9cf9447224f1705c (char byte) static boost::uint16_t to_uint16 structpion_1_1algorithm.html aa755b157b2cda061aec92c49b7ee9dac (unsigned char high, unsigned char low) static boost::int16_t to_int16 structpion_1_1algorithm.html a32a9690172523ef7c558f92b319429c9 (unsigned char high, unsigned char low) static boost::uint32_t to_uint24 structpion_1_1algorithm.html ad1fd95bf2a6c3c2a775492c1acd0b5c1 (unsigned char high, unsigned char mid, unsigned char low) static boost::int32_t to_int24 structpion_1_1algorithm.html a607abc832ec9f6983cb42b76cc8914e6 (unsigned char high, unsigned char mid, unsigned char low) static boost::uint32_t to_uint32 structpion_1_1algorithm.html af2092366e2a82fbfc456bceb15a0f599 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) static boost::int32_t to_int32 structpion_1_1algorithm.html ac8dd9cfadaa3fb758b4ea3f9bd524595 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char low) static boost::uint64_t to_uint64 structpion_1_1algorithm.html ab4622cfb454d0ca206ffe42077a15c52 (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) static boost::int64_t to_int64 structpion_1_1algorithm.html aa08271822b58fa0ca87fb4f0740b1d3a (unsigned char high, unsigned char mid1, unsigned char mid2, unsigned char mid3, unsigned char mid4, unsigned char mid5, unsigned char mid6, unsigned char low) static boost::uint16_t to_uint16 structpion_1_1algorithm.html a7052628a032ebcd1c3b740df7200a8de (T1 high, T2 low) static boost::int16_t to_int16 structpion_1_1algorithm.html a034466e83420673e09a472c71c493141 (T1 high, T2 low) static boost::uint32_t to_uint24 structpion_1_1algorithm.html ae409867961cddd04961428e569ea5ff5 (T1 high, T2 mid, T3 low) static boost::int32_t to_int24 structpion_1_1algorithm.html a87d45ecf097910616abfbba0e2de07c4 (T1 high, T2 mid, T3 low) static boost::uint32_t to_uint32 structpion_1_1algorithm.html ab7bce4210081b843534ea5db13991716 (T1 high, T2 mid1, T3 mid2, T4 low) static boost::int32_t to_int32 structpion_1_1algorithm.html aeeb4ad9f76ad506cec4c731b054c2f31 (T1 high, T2 mid1, T3 mid2, T4 low) static boost::uint64_t to_uint64 structpion_1_1algorithm.html a3157664a93778809b50791f5d6361eab (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) static boost::int64_t to_int64 structpion_1_1algorithm.html ac833e7576309a63c514ad23066a5c86d (T1 high, T2 mid1, T3 mid2, T4 mid3, T5 mid4, T6 mid5, T7 mid6, T8 low) static boost::uint8_t to_uint8 structpion_1_1algorithm.html ac543d70ca58331348b6acd3bf2d81e87 (const Byte *buf) static boost::int8_t to_int8 structpion_1_1algorithm.html a79ecbc1784fbff99ab430e0deaeab745 (const Byte *buf) static boost::uint16_t to_uint16 structpion_1_1algorithm.html aa9cf03ca1aad0a9130aca2623ed89d1c (const Byte *buf) static boost::int16_t to_int16 structpion_1_1algorithm.html a61c5017275dd7b62e0ab7f91ddb0a3f1 (const Byte *buf) static boost::uint32_t to_uint24 structpion_1_1algorithm.html aa0c7e4ffe39e195b048226a231edb410 (const Byte *buf) static boost::int32_t to_int24 structpion_1_1algorithm.html ab5ee29a3c6df9fc556a8de432676c2bf (const Byte *buf) static boost::uint32_t to_uint32 structpion_1_1algorithm.html a0296b43ce06c2882e2bc07b9a3e67f53 (const Byte *buf) static boost::int32_t to_int32 structpion_1_1algorithm.html a5bcf5c5e18d33606425e8119b6561f12 (const Byte *buf) static boost::uint64_t to_uint64 structpion_1_1algorithm.html a1cd6fc861db28b3bf8ab896e2e9ce50d (const Byte *buf) static boost::int64_t to_int64 structpion_1_1algorithm.html acd8f7a0dbf2d3940845b4d16d082d6f6 (const Byte *buf) static void from_uint8 structpion_1_1algorithm.html adee6fd962b989fa74e1aa252f3dc2843 (Byte *buf, const boost::uint8_t n) static void from_int8 structpion_1_1algorithm.html a2990b14778b9f0620f30a49e03710b92 (Byte *buf, const boost::int8_t n) static void from_uint16 structpion_1_1algorithm.html af648bb4c015fbc0f489f8562c497320a (Byte *buf, const boost::uint16_t n) static void from_int16 structpion_1_1algorithm.html a103a14505b46b6557afe51a59bb2e2f2 (Byte *buf, const boost::int16_t n) static void from_uint24 structpion_1_1algorithm.html a74e079bdd49c996d1d6e089d71c31692 (Byte *buf, const boost::uint32_t n) static void from_int24 structpion_1_1algorithm.html a3fe9cd2ca9d818166406bdcce9c78e37 (Byte *buf, const boost::int32_t n) static void from_uint32 structpion_1_1algorithm.html a083603e3fc47a08f9e1e2879ccc2089c (Byte *buf, const boost::uint32_t n) static void from_int32 structpion_1_1algorithm.html a76f4b44a7f9dc1693f64182de05ccff5 (Byte *buf, const boost::int32_t n) static void from_uint64 structpion_1_1algorithm.html a3238718a13072616acde0c17e9598c85 (Byte *buf, const boost::uint64_t n) static void from_int64 structpion_1_1algorithm.html a404abee06f376da18bb1903f7e38a010 (Byte *buf, const boost::int64_t n) static float to_float structpion_1_1algorithm.html ac89c656607e9fd2cdff0e83357305410 (const Byte *ptr) static double to_double structpion_1_1algorithm.html acba0b28df02a7cb55b6d7ab0b9afdf06 (const Byte *ptr) static long double to_long_double structpion_1_1algorithm.html aa50b600c44049191534889b1849bb906 (const Byte *ptr) static void from_float structpion_1_1algorithm.html acbff48b249a7f07c572267ff1023e366 (Byte *ptr, const float n) static void from_double structpion_1_1algorithm.html a3ea0d3aec95dc5d414a8d3fa4e0e4fcb (Byte *ptr, const double n) static void from_long_double structpion_1_1algorithm.html a4e68ee1d2e4fd3087f1e947eb466eea2 (Byte *ptr, const long double n) pion::exception classpion_1_1exception.html exception classpion_1_1exception.html aaec2c298dcad795cf4b66c18c440dfcb (const std::string &msg) exception classpion_1_1exception.html a970d4da1afade252a5024dec90aa48d7 (const char *const msg) virtual const char * what classpion_1_1exception.html a40a62768258b7772de35398177dbd6ce () const void set_what_msg classpion_1_1exception.html ab7aa00d924b61114cd98a96ec8a78a98 (const char *const msg=NULL, const std::string *const arg1=NULL, const std::string *const arg2=NULL, const std::string *const arg3=NULL) const virtual void update_what_msg classpion_1_1exception.html a13a7f06c1c25bfa139447f5ac091f85f () const std::string m_what_msg classpion_1_1exception.html ae1c8e87bb8013e9abccc5326bdcbab72 pion::iequal_to structpion_1_1iequal__to.html bool operator() structpion_1_1iequal__to.html abdbf26bf08c7d62d25d76968558b4818 (std::string const &x, std::string const &y) const pion::ihash structpion_1_1ihash.html std::size_t operator() structpion_1_1ihash.html a9def756411120d3503edb9fd84ca67b7 (std::string const &x) const pion::logger structpion_1_1logger.html logger structpion_1_1logger.html a54b536916928e59a4c98ac3bfb1d4138 (int) operator bool structpion_1_1logger.html ad45d87a16d486ef651b79bfd9a0de675 () const static void shutdown structpion_1_1logger.html a2e9f33f545c83e3c6f59df3e067b9181 () pion::plugin classpion_1_1plugin.html pion::plugin::config_type pion::plugin::data_type bool is_open classpion_1_1plugin.html a61186fb4cf7ec683e7d9e9f54c507df8 (void) const std::string get_plugin_name classpion_1_1plugin.html afbb2e9290143f779b0d01d1ab925cde2 (void) const void open classpion_1_1plugin.html ad2f241076913d3ef35caa298992aa21d (const std::string &plugin_name) void open_file classpion_1_1plugin.html aa3848e4da0ef4592079a378f1d81fe12 (const std::string &plugin_file) void close classpion_1_1plugin.html a4de512c3cdeb3cd9dedd3a49f754cc1a (void) static bool find_plugin_file classpion_1_1plugin.html a8bded1e5b0c6e5008fb62613bf7bed63 (std::string &path_to_file, const std::string &name) static bool find_config_file classpion_1_1plugin.html a885fb365fc2fedf251853eb949fcf38a (std::string &path_to_file, const std::string &name) static void add_static_entry_point classpion_1_1plugin.html a7f070e7afa7b82ee9da454495ee7d659 (const std::string &plugin_name, void *create_func, void *destroy_func) static void check_cygwin_path classpion_1_1plugin.html a424890d78c0e7fe566043b75016bf738 (boost::filesystem::path &final_path, const std::string &path_string) static void add_plugin_directory classpion_1_1plugin.html aed4ab06e4aa42456df83e4e3e120dda5 (const std::string &dir) static void reset_plugin_directories classpion_1_1plugin.html a797d2923f9495109290755625070f93e (void) static void get_all_plugin_names classpion_1_1plugin.html add067f91834b99ad73d2ec448aebe33b (std::vector< std::string > &plugin_names) plugin classpion_1_1plugin.html a132d7077794fd139df56350908805f75 (void) plugin classpion_1_1plugin.html aa651a50b3be4d9e35ade63b9c9ee66a7 (const plugin &p) plugin & operator= classpion_1_1plugin.html a31b0610dce244c86d80981240bdb0e62 (const plugin &p) void * get_create_function classpion_1_1plugin.html a8300881be4224c9331fcbdfc69beb078 (void) void * get_destroy_function classpion_1_1plugin.html a473f250fea6e643944aad4484db2b3c9 (void) void release_data classpion_1_1plugin.html a6170412055354b9d32c6551baa0bed37 (void) void grab_data classpion_1_1plugin.html a928793b2ab39387ec1b467ee618fbaa1 (const plugin &p) pion::plugin::data_type structpion_1_1plugin_1_1data__type.html data_type structpion_1_1plugin_1_1data__type.html a22a8f203cafa3f97ae61fdbe607557a8 (void) data_type structpion_1_1plugin_1_1data__type.html aece7d2d77c4c119df5859f765fa568b4 (const std::string &plugin_name) data_type structpion_1_1plugin_1_1data__type.html a15d9c1fdfdab4585e516b041084bbe5d (const data_type &p) void * m_lib_handle structpion_1_1plugin_1_1data__type.html ab53016d3d93ba84c07490a413fd01bcf void * m_create_func structpion_1_1plugin_1_1data__type.html a11bd2c34a50310a4ed6042eae415c0c4 void * m_destroy_func structpion_1_1plugin_1_1data__type.html a19893ea2b05e69dfb2b346ee5f7aea41 std::string m_plugin_name structpion_1_1plugin_1_1data__type.html a9ae35daeb06cf5f00675ff690d37db69 unsigned long m_references structpion_1_1plugin_1_1data__type.html a2536d38120032c485b556d174ad46013 pion::plugin_ptr classpion_1_1plugin__ptr.html InterfaceClassType pion::plugin plugin_ptr classpion_1_1plugin__ptr.html a3fb9fad6bdaee03c90651b46564075a1 (void) plugin_ptr classpion_1_1plugin__ptr.html ab79c8e53cd10a3471f0ff68651c1514b (const plugin_ptr &p) plugin_ptr & operator= classpion_1_1plugin__ptr.html af86e0fd368c1b60a471b9e107f829f27 (const plugin_ptr &p) InterfaceClassType * create classpion_1_1plugin__ptr.html abbe4fd78867b4a9dcae2245e54f47b55 (void) void destroy classpion_1_1plugin__ptr.html a0f128cd11b09e603dc8cd8d86a6f6824 (InterfaceClassType *object_ptr) InterfaceClassType * CreateObjectFunction classpion_1_1plugin__ptr.html a1082ceb3823f7f881cce49be1ebedb59 (void) void DestroyObjectFunction classpion_1_1plugin__ptr.html a38007852c54314c3c33bdb865cce7c8e (InterfaceClassType *) pion::plugin_instance_ptr classpion_1_1plugin__instance__ptr.html plugin_instance_ptr classpion_1_1plugin__instance__ptr.html a79eb26b5a1ff329e4893c644a625dcc6 (void) virtual ~plugin_instance_ptr classpion_1_1plugin__instance__ptr.html a6567dda0004c26eba60a6c714d52c696 () void reset classpion_1_1plugin__instance__ptr.html a3c6d24f4501a0e1838e5bedd34e20372 (void) void create classpion_1_1plugin__instance__ptr.html a7cc8432ad7e88298c719e9b41007e93d (const std::string &plugin_type) bool empty classpion_1_1plugin__instance__ptr.html ac4655ccda770223a852233c7c9ffb0d0 (void) const InterfaceClassType * get classpion_1_1plugin__instance__ptr.html a30f57ad0560c0cbdd0f00f345cd3a41a (void) InterfaceClassType & operator* classpion_1_1plugin__instance__ptr.html af1919987100381b912d49144f75c46fe (void) const InterfaceClassType & operator* classpion_1_1plugin__instance__ptr.html a0ed2270357907c47060b5c0bd14cb6fb (void) const InterfaceClassType * operator-> classpion_1_1plugin__instance__ptr.html a84f65b0841e70a2a6017792d5749390e (void) const InterfaceClassType * operator-> classpion_1_1plugin__instance__ptr.html a26b25d3a76f14a22636727ed774eac29 (void) const plugin_ptr< InterfaceClassType > m_plugin_ptr classpion_1_1plugin__instance__ptr.html a65856c5fbd856e3c106e3ae708369109 InterfaceClassType * m_instance_ptr classpion_1_1plugin__instance__ptr.html a414a8f8e915a41caa94aca991cbb775e pion::plugin_manager classpion_1_1plugin__manager.html PluginType pion::plugin_manager::map_type boost::function1< void, PluginType * > PluginRunFunction classpion_1_1plugin__manager.html a275b88a2c9f7c89d6d737c1b444be8b2 boost::function1< boost::uint64_t, const PluginType * > PluginStatFunction classpion_1_1plugin__manager.html a1e6a4223438c74e4e928401f734d2e0c plugin_manager classpion_1_1plugin__manager.html a6f451cdb1f4ea91b954e5dd453a827d3 (void) virtual ~plugin_manager classpion_1_1plugin__manager.html aff2f27834dee6eb0087e68f2af86b9e9 () void clear classpion_1_1plugin__manager.html ac56a5e432352d1b9c2a4853ce82a5a8c (void) bool empty classpion_1_1plugin__manager.html adee5498ef23acb797355b2a79f3fd059 (void) const void add classpion_1_1plugin__manager.html ad017fef715f7b049513eb176e1df809b (const std::string &plugin_id, PluginType *plugin_object_ptr) void remove classpion_1_1plugin__manager.html a2acdd8496472871d8ab881637577240d (const std::string &plugin_id) void replace classpion_1_1plugin__manager.html ab8d0b6ecfa27e23495a64d94147c4d60 (const std::string &plugin_id, PluginType *plugin_ptr) PluginType * clone classpion_1_1plugin__manager.html abb39b6639117e8a3f557a628fa302c44 (const std::string &plugin_id) PluginType * load classpion_1_1plugin__manager.html a3e03e5f6023f530c91464b766b2fab9e (const std::string &plugin_id, const std::string &plugin_type) PluginType * get classpion_1_1plugin__manager.html a348da20310edf84242a2688ddc1639e9 (const std::string &plugin_id) const PluginType * get classpion_1_1plugin__manager.html a716a150691df75fb46d1f472e3eda2f6 (const std::string &plugin_id) const plugin_ptr< PluginType > get_lib_ptr classpion_1_1plugin__manager.html abb0ab4f0a27e5739682430b8a6d06f15 (const std::string &plugin_id) const PluginType * find classpion_1_1plugin__manager.html ab58061848dde1682a7c013c7f468d191 (const std::string &resource) void run classpion_1_1plugin__manager.html a1c2f6105acfcfcf1b742aecab122a368 (PluginRunFunction run_func) void run classpion_1_1plugin__manager.html af530db568a45e50b3d8b06976c13d994 (const std::string &plugin_id, PluginRunFunction run_func) boost::uint64_t get_statistic classpion_1_1plugin__manager.html a40b42b430ba69d4f0143c04ceed81f57 (PluginStatFunction stat_func) const boost::uint64_t get_statistic classpion_1_1plugin__manager.html a9a569d4782392bf94a0faed3143eedd4 (const std::string &plugin_id, PluginStatFunction stat_func) const map_type m_plugin_map classpion_1_1plugin__manager.html a6022dd5905f5079523844d68cd89977d boost::mutex m_plugin_mutex classpion_1_1plugin__manager.html a4ce56259eca75c8c88bdc4f778526ec4 pion::plugin_manager::map_type classpion_1_1plugin__manager_1_1map__type.html void clear classpion_1_1plugin__manager_1_1map__type.html a68c8fa315ba4a7ff7bb81a14e362dff1 (void) pion::process classpion_1_1process.html pion::process::config_type process classpion_1_1process.html a75bde31b3d1651f92705ae06eda36917 (void) static void shutdown classpion_1_1process.html aed3145650f11fcea4e968efc55127aba (void) static void wait_for_shutdown classpion_1_1process.html a0141a4c774af4e4e605230c277cfa4f7 (void) static void initialize classpion_1_1process.html af6bf25c64faa04c8dba9cb215201d50e (void) static void daemonize classpion_1_1process.html af944a4e1fc8b6e4c1d8b4d8be52d1a8b (void) static config_type & get_config classpion_1_1process.html ae3a984eb1083aa0d3d45af1f96e90a29 (void) pion::process::config_type structpion_1_1process_1_1config__type.html config_type structpion_1_1process_1_1config__type.html a89ae5c8f99282b03c22006ce00c619e2 () bool shutdown_now structpion_1_1process_1_1config__type.html aea142e63e9a962ffefb5c0d2091ed303 boost::condition shutdown_cond structpion_1_1process_1_1config__type.html aec765e2fe0c8e6a474c78c2511079957 boost::mutex shutdown_mutex structpion_1_1process_1_1config__type.html aeea8f463fcb510add8cab8e5fa20f0e4 pion::scheduler classpion_1_1scheduler.html scheduler classpion_1_1scheduler.html a745efe16565852dc0b54bea88eb6d7fb (void) virtual ~scheduler classpion_1_1scheduler.html a24c6e2c943335bba6ec6d1d8dae20c0e () virtual void startup classpion_1_1scheduler.html ab656139dc844a547d5c1001b3ef17d13 (void) virtual void shutdown classpion_1_1scheduler.html a54887d0e772ed9c01156a46f2d89ce93 (void) void join classpion_1_1scheduler.html ab9a1777f25b90f1970ea97035dd7310d (void) void add_active_user classpion_1_1scheduler.html aff5a6778a3a6174d7d684b709901d1d0 (void) void remove_active_user classpion_1_1scheduler.html a402e15e25d6c4b63241a636bd3ca53cf (void) bool is_running classpion_1_1scheduler.html a83d328c2947c65e77a603a4127442eb4 (void) const void set_num_threads classpion_1_1scheduler.html acd1c3b2393354a9db7a4dba6aa028b83 (const boost::uint32_t n) boost::uint32_t get_num_threads classpion_1_1scheduler.html af9b6fe7245c024bd18e3f245993cd965 (void) const void set_logger classpion_1_1scheduler.html a3842b00e98a84105cbeb8a1786c9e353 (logger log_ptr) logger get_logger classpion_1_1scheduler.html a3fba5b7cb9d99d49394241e386e5f581 (void) virtual boost::asio::io_service & get_io_service classpion_1_1scheduler.html a037e0ee2c2c83b7002180a4656ccbbfa (void)=0 virtual void post classpion_1_1scheduler.html aad1b779b29a0dc3b8c2e38e5e67263bb (boost::function0< void > work_func) void keep_running classpion_1_1scheduler.html a8bda557ed5c95e2fbec96e14c793e844 (boost::asio::io_service &my_service, boost::asio::deadline_timer &my_timer) void process_service_work classpion_1_1scheduler.html a53cdc5fc1fb829de12cefd4183021d28 (boost::asio::io_service &service) static void sleep classpion_1_1scheduler.html aeaa9a398167fdab0fa0f5a1e16d0a279 (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) static void sleep classpion_1_1scheduler.html a0eca170d3ff225f2461080f2f5f763cb (ConditionType &wakeup_condition, LockType &wakeup_lock, boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) virtual void stop_services classpion_1_1scheduler.html a62b59f0561bd527d78768fd3a5ceeb36 (void) virtual void stop_threads classpion_1_1scheduler.html abd7b1239bb9cf5a6ca1492341adfc4db (void) virtual void finish_services classpion_1_1scheduler.html a64dbc267db8e1481f80ba6d42bbb24ea (void) virtual void finish_threads classpion_1_1scheduler.html a6436e075a8c23734e55329f4286b5509 (void) static boost::system_time get_wakeup_time classpion_1_1scheduler.html ad4ca39f249281cb2c6bd354cc52d0b9e (boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) boost::mutex m_mutex classpion_1_1scheduler.html a0a1cf13bf9b31229c6d6f030ddbb0d09 logger m_logger classpion_1_1scheduler.html aa611e2e63bc69eefce43c243846d99e5 boost::condition m_no_more_active_users classpion_1_1scheduler.html a35fe165b525a1babfa8dd2a602d0e598 boost::condition m_scheduler_has_stopped classpion_1_1scheduler.html ab5321fccd4a1136f4358cce8679d22fd boost::uint32_t m_num_threads classpion_1_1scheduler.html a0ecf6f549714b0e9e33fea80a11a073f boost::uint32_t m_active_users classpion_1_1scheduler.html aa8028397b2e084c8808032ac448955b8 bool m_is_running classpion_1_1scheduler.html a1fa5ef108570fe6c4a984fb1c01e8bd9 static const boost::uint32_t DEFAULT_NUM_THREADS classpion_1_1scheduler.html ab8d6ac8ea6a3946abe86cbd20f0783e0 static const boost::uint32_t NSEC_IN_SECOND classpion_1_1scheduler.html aa5633b15c629c78c2aeb451ae428ea25 static const boost::uint32_t MICROSEC_IN_SECOND classpion_1_1scheduler.html acbe8f3104aa4713c93bbf3f2abe8615a static const boost::uint32_t KEEP_RUNNING_TIMER_SECONDS classpion_1_1scheduler.html a4f2047f8ecdaf5901f3548ee693b39ce pion::multi_thread_scheduler classpion_1_1multi__thread__scheduler.html pion::scheduler multi_thread_scheduler classpion_1_1multi__thread__scheduler.html a7e60ea90622a43533abd1c7c6106d66c (void) virtual ~multi_thread_scheduler classpion_1_1multi__thread__scheduler.html a708525e3a1d80e350ca7030c8859221e () std::vector< boost::shared_ptr< boost::thread > > ThreadPool classpion_1_1multi__thread__scheduler.html a0cf5fa4c72b0c1f38043cf9ea61efeef virtual void stop_threads classpion_1_1multi__thread__scheduler.html a91945cc6c4a05a716fec36fc48474265 (void) virtual void finish_threads classpion_1_1multi__thread__scheduler.html a5e602b3bb9fd7208e7d3325f596e8266 (void) ThreadPool m_thread_pool classpion_1_1multi__thread__scheduler.html ad2b984248e4b064faae3cc3c7e75d30e pion::single_service_scheduler classpion_1_1single__service__scheduler.html pion::multi_thread_scheduler single_service_scheduler classpion_1_1single__service__scheduler.html a765e8e4dd3dc2f885dc0b1eb4009d3bd (void) virtual ~single_service_scheduler classpion_1_1single__service__scheduler.html a5a8e8455c8442eeebef78b78f549047e () virtual boost::asio::io_service & get_io_service classpion_1_1single__service__scheduler.html a9afe2d43c1deb4f78dc4cfabd5f3a873 (void) virtual void startup classpion_1_1single__service__scheduler.html a1f7e3583fb384e97eea9303201ae1631 (void) virtual void stop_services classpion_1_1single__service__scheduler.html a954817cfba7dddde2abe96f6fbb5d1a8 (void) virtual void finish_services classpion_1_1single__service__scheduler.html a87b3dd728dece02e378675d1536aea72 (void) boost::asio::io_service m_service classpion_1_1single__service__scheduler.html a2c46174147ba01f522f5e2e0a9f81d8c boost::asio::deadline_timer m_timer classpion_1_1single__service__scheduler.html a5898ac8ca81dfedb2b38b14d63519c2d pion::one_to_one_scheduler classpion_1_1one__to__one__scheduler.html pion::multi_thread_scheduler pion::one_to_one_scheduler::service_pair_type one_to_one_scheduler classpion_1_1one__to__one__scheduler.html a1cf085d6cabbbe06891f316a3c0cb938 (void) virtual ~one_to_one_scheduler classpion_1_1one__to__one__scheduler.html a76da28c9f319dced91f30b1d303da518 () virtual boost::asio::io_service & get_io_service classpion_1_1one__to__one__scheduler.html a6ead3ddcbbcbfb0eba98b102530d2a90 (void) virtual boost::asio::io_service & get_io_service classpion_1_1one__to__one__scheduler.html a5af0e30b2ef08cbbaf40278c9066c166 (boost::uint32_t n) virtual void startup classpion_1_1one__to__one__scheduler.html a8f32fd88bc0d95d9952c5045849e09b9 (void) std::vector< boost::shared_ptr< service_pair_type > > service_pool_type classpion_1_1one__to__one__scheduler.html ac41a2d4f38f49673139a77e609b1d084 virtual void stop_services classpion_1_1one__to__one__scheduler.html a39c02d4a67bf5cd28da3ce22363dd698 (void) virtual void finish_services classpion_1_1one__to__one__scheduler.html a3e9f1380789598587a27f0857e7c9133 (void) service_pool_type m_service_pool classpion_1_1one__to__one__scheduler.html a8b6ae075086a579e46ca08a89085c07a boost::uint32_t m_next_service classpion_1_1one__to__one__scheduler.html ae4e2b2a157c1c9e36694e86b6ae354b1 pion::one_to_one_scheduler::service_pair_type structpion_1_1one__to__one__scheduler_1_1service__pair__type.html boost::asio::io_service first structpion_1_1one__to__one__scheduler_1_1service__pair__type.html a74fee2ba10cca771f6db6da000b0d9bb boost::asio::deadline_timer second structpion_1_1one__to__one__scheduler_1_1service__pair__type.html ac809326d5069e14a65eb6effb94dac7b pion::user classpion_1_1user.html user classpion_1_1user.html a7215ae3543a0fc3c8c68e4e20f67d542 (std::string const &username) user classpion_1_1user.html a0d26edcf0b01dee7e3c4457ced9108d1 (std::string const &username, std::string const &password) virtual ~user classpion_1_1user.html adabb39ff720554fe13d8e93d7d647953 () std::string const & get_username classpion_1_1user.html abb1f00fc40a240786ca3f4f0703866e6 () const std::string const & get_password classpion_1_1user.html ab88146712e075ec69d9dfc4f3ba7f5ae () const virtual bool match_password classpion_1_1user.html af3f539ee4d00a29780d2c6e1c4396aaf (const std::string &password) const virtual void set_password classpion_1_1user.html aff790ab701624dce1a686737f391b6bc (const std::string &password) virtual void set_password_hash classpion_1_1user.html acb6cb362d99d6e1844bdb90e8121f806 (const std::string &password_hash) const std::string m_username classpion_1_1user.html a49689c1ffbdfa6a6d69fe445d290ddaa std::string m_password classpion_1_1user.html aebf5fb3a48c950dc906ee3bfeb414562 unsigned char m_password_hash classpion_1_1user.html a111ddd315310bf1ed484fd1a59fc878d [SHA_DIGEST_LENGTH] pion::user_manager classpion_1_1user__manager.html user_manager classpion_1_1user__manager.html a77ce496a03d84d4bd6e50747b53fd75d (void) virtual ~user_manager classpion_1_1user__manager.html a375a8b8618977fc60491c525390f1fb6 () bool empty classpion_1_1user__manager.html a88965b0300b9d137d45ae454f05b0952 (void) const virtual bool add_user classpion_1_1user__manager.html a533373b79db2ce4c0bcd42f9fcd9ab71 (const std::string &username, const std::string &password) virtual bool update_user classpion_1_1user__manager.html a78b22f774144fa0c65c2938a85ae06e0 (const std::string &username, const std::string &password) virtual bool add_user_hash classpion_1_1user__manager.html a8ea9661b0e9a30d23de18604ad59ba2d (const std::string &username, const std::string &password_hash) virtual bool update_user_hash classpion_1_1user__manager.html afb4107e5aa12a88b9fc131b2609ddbcf (const std::string &username, const std::string &password_hash) virtual bool remove_user classpion_1_1user__manager.html a5e9014c6d1a351bd5d997d1f5c3b89f0 (const std::string &username) virtual user_ptr get_user classpion_1_1user__manager.html ae3ac613907d88d967edc1849a937b10e (const std::string &username) virtual user_ptr get_user classpion_1_1user__manager.html a2f1534906b678b6cfe375fdd643edf39 (const std::string &username, const std::string &password) std::map< std::string, user_ptr > user_map_t classpion_1_1user__manager.html a6e856c85929ffbf1a558f61fd7e0b557 boost::mutex m_mutex classpion_1_1user__manager.html a89489a9cd9499628f9bc764143b06227 user_map_t m_users classpion_1_1user__manager.html a366cf3ed44fd3f4bb93f430884934f9d pion::error::bad_arg classpion_1_1error_1_1bad__arg.html pion::exception pion::error::bad_config classpion_1_1error_1_1bad__config.html pion::exception pion::error::open_file classpion_1_1error_1_1open__file.html pion::exception pion::error::open_plugin classpion_1_1error_1_1open__plugin.html pion::exception pion::error::read_file classpion_1_1error_1_1read__file.html pion::exception pion::error::file_not_found classpion_1_1error_1_1file__not__found.html pion::exception pion::error::directory_not_found classpion_1_1error_1_1directory__not__found.html pion::exception pion::error::plugin_not_found classpion_1_1error_1_1plugin__not__found.html pion::exception pion::error::duplicate_plugin classpion_1_1error_1_1duplicate__plugin.html pion::exception pion::error::plugin_missing_symbol classpion_1_1error_1_1plugin__missing__symbol.html pion::exception pion::error::plugin_undefined classpion_1_1error_1_1plugin__undefined.html pion::exception pion::error::bad_password_hash classpion_1_1error_1_1bad__password__hash.html pion::exception pion::http::auth classpion_1_1http_1_1auth.html auth classpion_1_1http_1_1auth.html a464d923e5f67955ae6862f749ea79cd7 (user_manager_ptr userManager) virtual ~auth classpion_1_1http_1_1auth.html a8e58182470ebd406f5754064a890786c () virtual bool handle_request classpion_1_1http_1_1auth.html aa3d943f0ac7c703abb4bf94e88100a5e (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0 virtual void set_option classpion_1_1http_1_1auth.html a575b866b9bc1e668ab6535cbc117c580 (const std::string &name, const std::string &value) void add_restrict classpion_1_1http_1_1auth.html a4f3dee0db0f53e8c78a24970fcd920ea (const std::string &resource) void add_permit classpion_1_1http_1_1auth.html a915cab76915bb3140007d4a432f881ce (const std::string &resource) virtual bool add_user classpion_1_1http_1_1auth.html a5d2af1bf25e6e3342cafe8b1f2cf9df9 (std::string const &username, std::string const &password) virtual bool update_user classpion_1_1http_1_1auth.html a850f65087e873e31de22b0a0fef79232 (std::string const &username, std::string const &password) virtual bool remove_user classpion_1_1http_1_1auth.html a5bb4dce624e8cfe416951bbed3ddce43 (std::string const &username) virtual user_ptr get_user classpion_1_1http_1_1auth.html aa066cc49589f0629b5b6e2a0e7050516 (std::string const &username) std::set< std::string > resource_set_type classpion_1_1http_1_1auth.html afba7081a3795e3010f0051e4e85a38e3 std::map< std::string, std::pair< boost::posix_time::ptime, user_ptr > > user_cache_type classpion_1_1http_1_1auth.html a57a2002495d45ac3ea508ee4186356b5 bool need_authentication classpion_1_1http_1_1auth.html a62f9ddca03be608b7884542b0d6904f6 (http::request_ptr const &http_request_ptr) const bool find_resource classpion_1_1http_1_1auth.html a87046c8b7fe4b74b1b76704c2093f6a9 (const resource_set_type &resource_set, const std::string &resource) const void set_logger classpion_1_1http_1_1auth.html af25a5d74ab812554d6c04379c856d019 (logger log_ptr) logger m_logger classpion_1_1http_1_1auth.html a936282ab441711ea3c5e52eab6ac9948 user_manager_ptr m_user_manager classpion_1_1http_1_1auth.html a5f85a718dc74306a6f62c931d2b4bc53 resource_set_type m_restrict_list classpion_1_1http_1_1auth.html a39970188567b9719e779dfe9ec0c901b resource_set_type m_white_list classpion_1_1http_1_1auth.html a7c65c43c168549ae65ce443c10a9021a boost::mutex m_resource_mutex classpion_1_1http_1_1auth.html a5c1e57d2531c833a747ebbf9f3efe213 pion::http::basic_auth classpion_1_1http_1_1basic__auth.html pion::http::auth basic_auth classpion_1_1http_1_1basic__auth.html a81644f280b0c499a06e0d44bccc83773 (user_manager_ptr userManager, const std::string &realm="PION") virtual ~basic_auth classpion_1_1http_1_1basic__auth.html a27a464fec905b9f071d1ecb3c026709b () virtual bool handle_request classpion_1_1http_1_1basic__auth.html af7072c2fec706d685cd7375bc7bc8574 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) virtual void set_option classpion_1_1http_1_1basic__auth.html a9da335bd02b00b82cff40cb333fe7ee7 (const std::string &name, const std::string &value) void handle_unauthorized classpion_1_1http_1_1basic__auth.html a4f95f24882227d8c5d990d44520a4d65 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static bool parse_authorization classpion_1_1http_1_1basic__auth.html ae93865f8cdee463b021a8746aa802026 (std::string const &authorization, std::string &credentials) static bool parse_credentials classpion_1_1http_1_1basic__auth.html a54f121e4a3385e44d9503bc3cb9f3385 (std::string const &credentials, std::string &username, std::string &password) pion::http::cookie_auth classpion_1_1http_1_1cookie__auth.html pion::http::auth cookie_auth classpion_1_1http_1_1cookie__auth.html a769336238f9a20b74eb29be7db6e8bd3 (user_manager_ptr userManager, const std::string &login="/login", const std::string &logout="/logout", const std::string &redirect="") virtual ~cookie_auth classpion_1_1http_1_1cookie__auth.html af161887edda25c1e95bae51a74dc843a () virtual bool handle_request classpion_1_1http_1_1cookie__auth.html a83a9f7e27e1c8f714f6ba79101dea498 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) virtual void set_option classpion_1_1http_1_1cookie__auth.html a87eb9ebf16f524aaf672465c37299772 (const std::string &name, const std::string &value) bool process_login classpion_1_1http_1_1cookie__auth.html a5263531417c673055b050ca76d3844a3 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) void handle_unauthorized classpion_1_1http_1_1cookie__auth.html a290a0bfd6f886600fd7eb006a2b28e99 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) void handle_redirection classpion_1_1http_1_1cookie__auth.html a80517399e8467252c8fb8417e794f5dd (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false) void handle_ok classpion_1_1http_1_1cookie__auth.html a0c38b182c3374382f6000abb8e8d4319 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &new_cookie="", bool delete_cookie=false) void expire_cache classpion_1_1http_1_1cookie__auth.html a2ed6fd5500e68795955aedd6570328f4 (const boost::posix_time::ptime &time_now) pion::http::message classpion_1_1http_1_1message.html pion::http::types pion::http::message::content_buffer_t pion::http::message::receive_error_t data_status_t classpion_1_1http_1_1message.html ab71e06f72cacb4945dbf84663b0420e9 std::vector< boost::asio::const_buffer > write_buffers_t classpion_1_1http_1_1message.html aacf9a6a7677c32e4ab764ac97d0b5e7b std::vector< char > chunk_cache_t classpion_1_1http_1_1message.html a4bcf1ea1d4e7a5637d04ae109adb5e46 message classpion_1_1http_1_1message.html ad07a7f30359b9f44c9159f3f9a9db507 (void) message classpion_1_1http_1_1message.html a576e849f9d4a138d4856c83ceb0c47a3 (const message &http_msg) message & operator= classpion_1_1http_1_1message.html a854b089e577498c9b01e5ec460595a35 (const message &http_msg) virtual ~message classpion_1_1http_1_1message.html ac71ae21f149f7d74b2bdee1bf1149ead () virtual void clear classpion_1_1http_1_1message.html af13279269cf1e00ae4fc5091c1c7cae5 (void) virtual bool is_content_length_implied classpion_1_1http_1_1message.html a08bd257bd46e7a42b64bbc4482f28363 (void) const =0 bool is_valid classpion_1_1http_1_1message.html a52850e6fe48b141f46662c83d4edbbf5 (void) const bool get_chunks_supported classpion_1_1http_1_1message.html a42ea3cfa8633a99a9c517afe2db00a1a (void) const boost::asio::ip::address & get_remote_ip classpion_1_1http_1_1message.html a42fdde8d94227c6d08d475c5ed8a6388 (void) boost::uint16_t get_version_major classpion_1_1http_1_1message.html a6d36c13df002129d3044d9c34999161d (void) const boost::uint16_t get_version_minor classpion_1_1http_1_1message.html ac986c7014db695241db1823f17eda4cd (void) const std::string get_version_string classpion_1_1http_1_1message.html a0bb6e14bd27dc1b956bb74dcccc7ee27 (void) const size_t get_content_length classpion_1_1http_1_1message.html a10606f8fd2efbe14d447ef8eb8731a54 (void) const bool is_chunked classpion_1_1http_1_1message.html a96264a238b04e1957c87ab7930a8023b (void) const bool is_content_buffer_allocated classpion_1_1http_1_1message.html a7229c3a00b35846cdb050fc2b9b6ec73 () const std::size_t get_content_buffer_size classpion_1_1http_1_1message.html a172346504faba36f73d7527551c199a2 () const char * get_content classpion_1_1http_1_1message.html a60ddb1bd09afecdadc5e9c33c8c1de28 (void) const char * get_content classpion_1_1http_1_1message.html aa2363086d3f0c17a54ecebaef558b971 (void) const chunk_cache_t & get_chunk_cache classpion_1_1http_1_1message.html aa672e8369ab07a212902a98f351805f3 (void) const std::string & get_header classpion_1_1http_1_1message.html ab9e2735d01890cd8e93f86390cd46969 (const std::string &key) const ihash_multimap & get_headers classpion_1_1http_1_1message.html a8d067675e0396114e814ad688bed2b4f (void) bool has_header classpion_1_1http_1_1message.html ac6667e7a771b157e24858700b4777223 (const std::string &key) const const std::string & get_cookie classpion_1_1http_1_1message.html a735de2125e0b3c3a8caae7fad757cfc0 (const std::string &key) const ihash_multimap & get_cookies classpion_1_1http_1_1message.html ab5e744890af0936eda97c21888bb4a2e (void) bool has_cookie classpion_1_1http_1_1message.html af033e860c1f7295a6ef8eb5ea75f53e8 (const std::string &key) const void add_cookie classpion_1_1http_1_1message.html a0bc8756a9db916d5423dad19211de771 (const std::string &key, const std::string &value) void change_cookie classpion_1_1http_1_1message.html a1bfed0c1dc6a76384798c51ae74ea2da (const std::string &key, const std::string &value) void delete_cookie classpion_1_1http_1_1message.html a79e4153703ae62a1b8b0585510d032fd (const std::string &key) const std::string & get_first_line classpion_1_1http_1_1message.html ad9c43932bae03916ad193c257a7ec6c8 (void) const bool has_missing_packets classpion_1_1http_1_1message.html a0ab661db865a6d018e8487a1b4f6932b () const void set_missing_packets classpion_1_1http_1_1message.html ac0749dac4643586e3925d73782840b26 (bool newVal) bool has_data_after_missing_packets classpion_1_1http_1_1message.html a52fd51aca9d5a37f41a0ad18d577ddec () const void set_data_after_missing_packet classpion_1_1http_1_1message.html af9081484fde89d5e8bdfcb689bebdeb1 (bool newVal) void set_is_valid classpion_1_1http_1_1message.html a24b208fd31a21a5bdb76a6ba8683321e (bool b=true) void set_chunks_supported classpion_1_1http_1_1message.html a524e682e0c1843d2bee6ad83c6b9e218 (bool b) void set_remote_ip classpion_1_1http_1_1message.html a476f852158ecaefef8f3e93a84e1f76a (const boost::asio::ip::address &ip) void set_version_major classpion_1_1http_1_1message.html aab454a1ce4eebd904b8ee7fff3dbe5d9 (const boost::uint16_t n) void set_version_minor classpion_1_1http_1_1message.html a311e93b0818ec735a4933e825a55c12e (const boost::uint16_t n) void set_content_length classpion_1_1http_1_1message.html a81612c01ac85ebe08b947b1f9cfc2a75 (size_t n) void set_do_not_send_content_length classpion_1_1http_1_1message.html af6cf5b229cacaaec5ea2bac0df53e199 (void) data_status_t get_status classpion_1_1http_1_1message.html aabb2581095e035b5b274ee88442ad9ed () const void set_status classpion_1_1http_1_1message.html ad24b94c3ad437b2044c2658fa34bd78d (data_status_t newVal) void update_content_length_using_header classpion_1_1http_1_1message.html a6a7a6a5114da843c033283a6c1db48aa (void) void update_transfer_encoding_using_header classpion_1_1http_1_1message.html a8118770f69c9a479f3f5dcbc58d6d644 (void) char * create_content_buffer classpion_1_1http_1_1message.html a468f42e5bc2866d9c93138e3a4cec31b (void) void set_content classpion_1_1http_1_1message.html a3600676865fc813897e0ed45b58e5600 (const std::string &content) void clear_content classpion_1_1http_1_1message.html a33567717927344a33bc8332ad3a391a6 (void) void set_content_type classpion_1_1http_1_1message.html add4f889bb2d22e163556c2fd5fd993a8 (const std::string &type) void add_header classpion_1_1http_1_1message.html a115c9657c4933f034dcf2f4ce7bd55f0 (const std::string &key, const std::string &value) void change_header classpion_1_1http_1_1message.html aa1643164e7f60bae1b640d55735a4728 (const std::string &key, const std::string &value) void delete_header classpion_1_1http_1_1message.html a070ef742af75674725da392c25774884 (const std::string &key) bool check_keep_alive classpion_1_1http_1_1message.html ab0aa463a1327eac0d73ff6ab62ca3891 (void) const void prepare_buffers_for_send classpion_1_1http_1_1message.html a668182618dfc614ddbe6c1af26552568 (write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks) std::size_t send classpion_1_1http_1_1message.html ab90f91badb0f98f900a7624418781bea (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false) std::size_t receive classpion_1_1http_1_1message.html a7e3c3f1ea265f91b87a9e075234b5d31 (tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser) std::size_t receive classpion_1_1http_1_1message.html a029d3c6260deabf91fdcc9f1f0157268 (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) std::size_t write classpion_1_1http_1_1message.html a4a3911ad03031a1ddacfa4cedeb125a2 (std::ostream &out, boost::system::error_code &ec, bool headers_only=false) std::size_t read classpion_1_1http_1_1message.html a7b67f3e8303d838bb5d379ab72a35e2d (std::istream &in, boost::system::error_code &ec, parser &http_parser) std::size_t read classpion_1_1http_1_1message.html ae99b6c39dd1b878520125f7037c035de (std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) void concatenate_chunks classpion_1_1http_1_1message.html aeffca5e2173be2b83f38b630d07f4bfd (void) void prepare_headers_for_send classpion_1_1http_1_1message.html a1addd3b90c3b048c895f9723371f329f (const bool keep_alive, const bool using_chunks) void append_headers classpion_1_1http_1_1message.html a3184733c3a21b8aa44d8f301eaf52697 (write_buffers_t &write_buffers) virtual void append_cookie_headers classpion_1_1http_1_1message.html a532d475ab2dfdcdb969445902fad2e6f (void) void clear_first_line classpion_1_1http_1_1message.html ab47dc3343c9b2cbc7fdf8605e4b7d3b2 (void) const virtual void update_first_line classpion_1_1http_1_1message.html a697a832ab0741d02ddecd8df8da0265d (void) const =0 static const std::string & get_value classpion_1_1http_1_1message.html ada83b932a271cedc95a8318c6822360b (const DictionaryType &dict, const std::string &key) static void change_value classpion_1_1http_1_1message.html a71e183f222d96cdf51ff8d2c773a59d2 (DictionaryType &dict, const std::string &key, const std::string &value) static void delete_value classpion_1_1http_1_1message.html ace95da93ea1a4488f927e9340f2d3f53 (DictionaryType &dict, const std::string &key) std::string m_first_line classpion_1_1http_1_1message.html ad97c570395428af30074bd1b75672125 pion::http::message::content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html ~content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a3ea8a034039b47b3cbdbab2591812353 () content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a338e2dbbb2fa4b4ab4eb876837d39d90 () content_buffer_t classpion_1_1http_1_1message_1_1content__buffer__t.html a2f0ef54675bfaa620b4900866b8174e3 (const content_buffer_t &buf) content_buffer_t & operator= classpion_1_1http_1_1message_1_1content__buffer__t.html a79d3e130075949cb148734a4435a404a (const content_buffer_t &buf) bool is_empty classpion_1_1http_1_1message_1_1content__buffer__t.html a709d6984941254634cdb8b3527bb7ad6 () const std::size_t size classpion_1_1http_1_1message_1_1content__buffer__t.html a4af97b94d9c7a9dabcdb61fcf29a6742 () const const char * get classpion_1_1http_1_1message_1_1content__buffer__t.html a0612969681bf2b0a4078e31205e1cd86 () const char * get classpion_1_1http_1_1message_1_1content__buffer__t.html a768b0cce716f2dc01d2371ade49f9616 () void resize classpion_1_1http_1_1message_1_1content__buffer__t.html a1dc5a7c1a0864d7431bd335b7a86f466 (std::size_t len) void clear classpion_1_1http_1_1message_1_1content__buffer__t.html ad4b7e8e9c83c928800d06d78708c1c21 () pion::http::message::receive_error_t structpion_1_1http_1_1message_1_1receive__error__t.html virtual const char * name structpion_1_1http_1_1message_1_1receive__error__t.html ac1ebdeeaa859a18edbd9f2a290a5a1da () const BOOST_SYSTEM_NOEXCEPT virtual std::string message structpion_1_1http_1_1message_1_1receive__error__t.html aea06a28a16d1330a131778e251ac7883 (int ev) const pion::http::parser classpion_1_1http_1_1parser.html pion::http::parser::error_category_t error_value_t classpion_1_1http_1_1parser.html a056c791c4b2dda0dd4c2037dd941d5d8 boost::function2< void, const char *, std::size_t > payload_handler_t classpion_1_1http_1_1parser.html abff772b79d2a912b0f9a4932d8f03a35 parser classpion_1_1http_1_1parser.html a33fe9cfd9bcae8868b817332d38a9261 (const bool is_request, std::size_t max_content_length=DEFAULT_CONTENT_MAX) virtual ~parser classpion_1_1http_1_1parser.html ac9df3da159b11389dba00e222410a599 () boost::tribool parse classpion_1_1http_1_1parser.html aead5bbb8da80c78bc2de3c264e4ace9c (http::message &http_msg, boost::system::error_code &ec) boost::tribool parse_missing_data classpion_1_1http_1_1parser.html ae77669284c876d7b107ba30a78af6d02 (http::message &http_msg, std::size_t len, boost::system::error_code &ec) void finish classpion_1_1http_1_1parser.html afcf9b52d540f78af9177642a5c571362 (http::message &http_msg) const void set_read_buffer classpion_1_1http_1_1parser.html a71fdd1e6e681a3bd932baf2bd6a9f9c9 (const char *ptr, size_t len) void load_read_pos classpion_1_1http_1_1parser.html a3feba34ee7fb1c4f59dda5c1e58d3d82 (const char *&read_ptr, const char *&read_end_ptr) const bool check_premature_eof classpion_1_1http_1_1parser.html ad41eedba2dd5977ffddb1bc65dddc8fc (http::message &http_msg) void parse_headers_only classpion_1_1http_1_1parser.html a1f7f084f396c9c912d65426883b33a38 (bool b=true) void skip_header_parsing classpion_1_1http_1_1parser.html a0fb8ebee189b4c3613ee67c85e2ac9ce (http::message &http_msg) void reset classpion_1_1http_1_1parser.html aed8cfd92c078205e38294bd8109eb2d3 (void) bool eof classpion_1_1http_1_1parser.html adf957476284a4833ea89306e412b1862 (void) const std::size_t bytes_available classpion_1_1http_1_1parser.html a4e8f394a1c2296ac01d2c16c5128b7b4 (void) const std::size_t gcount classpion_1_1http_1_1parser.html ad708d537fabbc3093ea0ea9a519567dc (void) const std::size_t get_total_bytes_read classpion_1_1http_1_1parser.html ae458700259bab34f090832c3bc23ab80 (void) const std::size_t get_content_bytes_read classpion_1_1http_1_1parser.html ab0ca19c444c2d3cf816347422b1c5402 (void) const std::size_t get_max_content_length classpion_1_1http_1_1parser.html a2c6bf6775a9b1d8f1965190ef0dec780 (void) const const std::string & get_raw_headers classpion_1_1http_1_1parser.html a83774cd75b3a549a72ad45da17c99431 (void) const bool get_save_raw_headers classpion_1_1http_1_1parser.html ab5b4e9b0acdd3cd6b4ac3cfcc76c9a6f (void) const bool get_parse_headers_only classpion_1_1http_1_1parser.html a37e691fd12abb6be3bf2f0dda3c412d7 (void) bool is_parsing_request classpion_1_1http_1_1parser.html a94bf8701f781109b664d10e86bd67b8f (void) const bool is_parsing_response classpion_1_1http_1_1parser.html a057f0ee607bef1057902093f12861c1f (void) const void set_payload_handler classpion_1_1http_1_1parser.html a4605c605bf452336f34d7d48fce68ef6 (payload_handler_t &h) void set_max_content_length classpion_1_1http_1_1parser.html a6533144b6f6d1e93dd000360748ac271 (std::size_t n) void reset_max_content_length classpion_1_1http_1_1parser.html a8834a77e417b4127bdda4fa79ff5fe59 (void) void set_save_raw_headers classpion_1_1http_1_1parser.html a06b96d27daaea9ae3dd15f188e01f70b (bool b) void set_logger classpion_1_1http_1_1parser.html a3f93047d2f938a845967d22073122311 (logger log_ptr) logger get_logger classpion_1_1http_1_1parser.html ad799af46a7b4e3f1e27c047f76849d77 (void) boost::tribool finish_header_parsing classpion_1_1http_1_1parser.html ac707ec5cecacf3b56c151e6891c5cf9d (http::message &http_msg, boost::system::error_code &ec) static bool parse_uri classpion_1_1http_1_1parser.html a0688e577644445e854e6e9c1d614fd25 (const std::string &uri, std::string &proto, std::string &host, boost::uint16_t &port, std::string &path, std::string &query) static bool parse_url_encoded classpion_1_1http_1_1parser.html a3cda26a67405acd5ba04ee19bca52ea7 (ihash_multimap &dict, const char *ptr, const std::size_t len) static bool parse_multipart_form_data classpion_1_1http_1_1parser.html aa297a0f51bb5a605fb99f188066d9e15 (ihash_multimap &dict, const std::string &content_type, const char *ptr, const std::size_t len) static bool parse_cookie_header classpion_1_1http_1_1parser.html af9a9744b9376e79d4cc05d8c37533bec (ihash_multimap &dict, const char *ptr, const std::size_t len, bool set_cookie_header) static bool parse_cookie_header classpion_1_1http_1_1parser.html aaf57ebb2c31ecb126d5c4b2aba305417 (ihash_multimap &dict, const std::string &cookie_header, bool set_cookie_header) static bool parse_url_encoded classpion_1_1http_1_1parser.html a988623311585ce6097c90586f5711ee0 (ihash_multimap &dict, const std::string &query) static bool parse_multipart_form_data classpion_1_1http_1_1parser.html a456501e5a0e9b83fb3c030b003b60676 (ihash_multimap &dict, const std::string &content_type, const std::string &form_data) static bool parse_forwarded_for classpion_1_1http_1_1parser.html ab8bd069a0ae8fb51fb8ec6c3d02c065b (const std::string &header, std::string &public_ip) static error_category_t & get_error_category classpion_1_1http_1_1parser.html a9313aa230ae4af4c30702c0605a1f701 (void) static const std::size_t DEFAULT_CONTENT_MAX classpion_1_1http_1_1parser.html a77d2e93061f62e1b7028c783145adf22 virtual void finished_parsing_headers classpion_1_1http_1_1parser.html a1fc33380b9de53103f5f0c2dbabcd0c0 (const boost::system::error_code &ec) boost::tribool parse_headers classpion_1_1http_1_1parser.html a7377c221aaf546cfaf98fdb308c8739e (http::message &http_msg, boost::system::error_code &ec) void update_message_with_header_data classpion_1_1http_1_1parser.html ad1ffb1db7870fa7cfbcfe743a67aca23 (http::message &http_msg) const boost::tribool parse_chunks classpion_1_1http_1_1parser.html a658f65ec298a48e01054490da841f75c (http::message::chunk_cache_t &chunk_buffers, boost::system::error_code &ec) boost::tribool consume_content classpion_1_1http_1_1parser.html aaff1b32ea824c7d7782f8e58346506a7 (http::message &http_msg, boost::system::error_code &ec) std::size_t consume_content_as_next_chunk classpion_1_1http_1_1parser.html ac7234e092bdd29379a23b720e6566f56 (http::message::chunk_cache_t &chunk_buffers) static void compute_msg_status classpion_1_1http_1_1parser.html a50628b4ffc6ab8f0cf46873d6e8075bb (http::message &http_msg, bool msg_parsed_ok) static void set_error classpion_1_1http_1_1parser.html a0d8875ea346743ed37ae0cd7c2a73672 (boost::system::error_code &ec, error_value_t ev) static void create_error_category classpion_1_1http_1_1parser.html ad16455747863108b62c77d89bd5dcf0d (void) static bool is_char classpion_1_1http_1_1parser.html aa1099c00a26a33a615dfd54fd945873c (int c) static bool is_control classpion_1_1http_1_1parser.html aaf665f61057ffc430746134b88f20d11 (int c) static bool is_special classpion_1_1http_1_1parser.html a0e5e96ae29b09b95e407eb63403fa2a3 (int c) static bool is_digit classpion_1_1http_1_1parser.html add90b4c4bb8cc44eb79d2e6ba989ae9a (int c) static bool is_hex_digit classpion_1_1http_1_1parser.html a3d83fdf4309c2b57284759948b2bbc4b (int c) static bool is_cookie_attribute classpion_1_1http_1_1parser.html abeb585af8111e5a5f99d1ce87f6e107b (const std::string &name, bool set_cookie_header) logger m_logger classpion_1_1http_1_1parser.html ac0df021ba559d1af96dc9b0a5fa99df5 const bool m_is_request classpion_1_1http_1_1parser.html a5c24acf28ddd9c6133be4aa3127da530 const char * m_read_ptr classpion_1_1http_1_1parser.html a3ca52095a690cb92197755a5eea24cd7 const char * m_read_end_ptr classpion_1_1http_1_1parser.html a6788da854f2d77ae2c92c739d0a2c191 static const boost::uint32_t STATUS_MESSAGE_MAX classpion_1_1http_1_1parser.html a5480070912368dd015d72d54fcbece66 static const boost::uint32_t METHOD_MAX classpion_1_1http_1_1parser.html ad781cc2dcdb333a8d286a4534d4509cb static const boost::uint32_t RESOURCE_MAX classpion_1_1http_1_1parser.html adf1d822b13731ee6430d5cfd8ad78a95 static const boost::uint32_t QUERY_STRING_MAX classpion_1_1http_1_1parser.html a2ef9e2d01055c727c40cd6af47cbfd2a static const boost::uint32_t HEADER_NAME_MAX classpion_1_1http_1_1parser.html aa0d75346e6643078bb48efe9c382497d static const boost::uint32_t HEADER_VALUE_MAX classpion_1_1http_1_1parser.html a803490d20fadf6ee1253dd9d62844dd8 static const boost::uint32_t QUERY_NAME_MAX classpion_1_1http_1_1parser.html a730afd8438cd3c179bafc7d9eaad27b6 static const boost::uint32_t QUERY_VALUE_MAX classpion_1_1http_1_1parser.html a5b0039834377ba6797d6628acf59f240 static const boost::uint32_t COOKIE_NAME_MAX classpion_1_1http_1_1parser.html a12cb4b88d7debd8467cc9de786721be2 static const boost::uint32_t COOKIE_VALUE_MAX classpion_1_1http_1_1parser.html a50ae5c379ee3ad611fa6874bfcd8ed83 pion::http::parser::error_category_t classpion_1_1http_1_1parser_1_1error__category__t.html const char * name classpion_1_1http_1_1parser_1_1error__category__t.html a8b321a84e109e48fc9313115b27359cf () const BOOST_SYSTEM_NOEXCEPT std::string message classpion_1_1http_1_1parser_1_1error__category__t.html aeb4d9dcd75fe161241e0f691cfab99d9 (int ev) const pion::http::plugin_server classpion_1_1http_1_1plugin__server.html pion::http::server virtual ~plugin_server classpion_1_1http_1_1plugin__server.html a1a13fd90941df5f55fe031fb3e7cd112 () plugin_server classpion_1_1http_1_1plugin__server.html a1665134bc973811e4f56d9f9824a3d2e (const unsigned int tcp_port=0) plugin_server classpion_1_1http_1_1plugin__server.html abeb581d6ccb5b2a2e7758fdda5f823a1 (const boost::asio::ip::tcp::endpoint &endpoint) plugin_server classpion_1_1http_1_1plugin__server.html aded4ff4815ca2b9823e0b1d2d41d5e36 (scheduler &sched, const unsigned int tcp_port=0) plugin_server classpion_1_1http_1_1plugin__server.html a31afd25acb341046ed1bb02ae7097776 (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) void add_service classpion_1_1http_1_1plugin__server.html a03cfde741f7ab4cfd55477c138b7e222 (const std::string &resource, http::plugin_service *service_ptr) void load_service classpion_1_1http_1_1plugin__server.html af528e5b824fe420f2193512a3ccb204f (const std::string &resource, const std::string &service_name) void set_service_option classpion_1_1http_1_1plugin__server.html abc695deb661af5e24953a1a43e9b56fd (const std::string &resource, const std::string &name, const std::string &value) void load_service_config classpion_1_1http_1_1plugin__server.html a5da474d4ecbc39ef8ab6ab92e4b5e526 (const std::string &config_name) virtual void clear classpion_1_1http_1_1plugin__server.html a81c0779f8ddda5cdb6e05e1b74ec2fee (void) virtual void before_starting classpion_1_1http_1_1plugin__server.html af1384c8177300053f36bc705ca0fa9bf (void) virtual void after_stopping classpion_1_1http_1_1plugin__server.html aacd60688763e91387f6bd885cad5acfe (void) pion::http::plugin_service classpion_1_1http_1_1plugin__service.html plugin_service classpion_1_1http_1_1plugin__service.html a587b482f3e8d7bd03ac0d7d693538b23 (void) virtual ~plugin_service classpion_1_1http_1_1plugin__service.html a1d7ffeb7d24a0ab951562031b7c16552 () virtual void operator() classpion_1_1http_1_1plugin__service.html a2ea7bfac96e9d5fc2dbd327871540621 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn)=0 virtual void set_option classpion_1_1http_1_1plugin__service.html a49cddd4c2a99e276373b5f7162ff3cde (const std::string &name, const std::string &value) virtual void start classpion_1_1http_1_1plugin__service.html acb534a38c423ead57c98d07077579ecc (void) virtual void stop classpion_1_1http_1_1plugin__service.html a6d8c34f35f95d8e45c5476314bebdf6f (void) void set_resource classpion_1_1http_1_1plugin__service.html a081c90dafdae862ca35b4684eaed4b36 (const std::string &str) const std::string & get_resource classpion_1_1http_1_1plugin__service.html ae65490a94aeeabfdb0f890dc9a93e0be (void) const std::string get_relative_resource classpion_1_1http_1_1plugin__service.html a72659ae4dfd83e5a8411e5f1e9bf8dcb (const std::string &resource_requested) const pion::http::reader classpion_1_1http_1_1reader.html pion::http::parser void receive classpion_1_1http_1_1reader.html af9f883cb767252fb9976e229e68f20ea (void) tcp::connection_ptr & get_connection classpion_1_1http_1_1reader.html a6df8c9dd8f6587b49eb54ce4f7ace431 (void) void set_timeout classpion_1_1http_1_1reader.html aabe13844673a420869d0e0fe31e198ad (boost::uint32_t seconds) reader classpion_1_1http_1_1reader.html a32970499fa606eb9a8a71ce7afbcf252 (const bool is_request, tcp::connection_ptr &tcp_conn) void consume_bytes classpion_1_1http_1_1reader.html afd7a8af3a502d6863ef5c2166d3d7208 (const boost::system::error_code &read_error, std::size_t bytes_read) void consume_bytes classpion_1_1http_1_1reader.html acc3496a25c7bd1fb3ecc704ed752b190 (void) virtual void read_bytes classpion_1_1http_1_1reader.html a8a3b9767dc84fd1a6ee0e1558ec3d76e (void)=0 virtual void finished_reading classpion_1_1http_1_1reader.html ae7d3818810df72a7d2895ff1f767be9b (const boost::system::error_code &ec)=0 virtual http::message & get_message classpion_1_1http_1_1reader.html a6186ceb636d352cae97c33fe105bd9a3 (void)=0 pion::http::request classpion_1_1http_1_1request.html pion::http::message request classpion_1_1http_1_1request.html a186975ae3a5cb72c0faeb0f8f66ce594 (const std::string &resource) request classpion_1_1http_1_1request.html a4cf48bf36c01ed7899b72784e01adf83 (void) virtual ~request classpion_1_1http_1_1request.html a6b8d3e709899131b6d23ce623af4a7d3 () virtual void clear classpion_1_1http_1_1request.html a820ac867130387a16859a6cf9ca77c74 (void) virtual bool is_content_length_implied classpion_1_1http_1_1request.html a9ec7262ec35b4282ea66cf07e49fd4fb (void) const const std::string & get_method classpion_1_1http_1_1request.html a43fa910a94a42fe8b26700a94ab9c3c2 (void) const const std::string & get_resource classpion_1_1http_1_1request.html a929787cdfb1a8cca18c1971e3cfc5d54 (void) const const std::string & get_original_resource classpion_1_1http_1_1request.html a79e8400cd9f7b956a4116b9bf218486b (void) const const std::string & get_query_string classpion_1_1http_1_1request.html a0a4f0e3f4ee577db353a55524efb3526 (void) const const std::string & get_query classpion_1_1http_1_1request.html aee545d0144035125655d0a4de441820a (const std::string &key) const ihash_multimap & get_queries classpion_1_1http_1_1request.html a2e75b875b0858057b6b4bd6255f7424f (void) bool has_query classpion_1_1http_1_1request.html ac0da1fdcb02cf58ab0391d9f7955aeab (const std::string &key) const void set_method classpion_1_1http_1_1request.html a0878aad94ef74810b8df2670a17c22b2 (const std::string &str) void set_resource classpion_1_1http_1_1request.html a421f57b069fd2442397dbcdb8c382a87 (const std::string &str) void change_resource classpion_1_1http_1_1request.html a2e0eff2dbba55adc260b13a8be013e8c (const std::string &str) void set_query_string classpion_1_1http_1_1request.html adbcb876e6bf19efb6a84802d90347e2b (const std::string &str) void add_query classpion_1_1http_1_1request.html a4167f9aed250f3f7cb6d935b5787bbba (const std::string &key, const std::string &value) void change_query classpion_1_1http_1_1request.html a5bc1d88faa0f3bb054f32c7ff0257f3b (const std::string &key, const std::string &value) void delete_query classpion_1_1http_1_1request.html acfcd67cdc0c390f3c264935718fe0b57 (const std::string &key) void use_query_params_for_query_string classpion_1_1http_1_1request.html aa3dd2b6074201004ea631051367b21d7 (void) void use_query_params_for_post_content classpion_1_1http_1_1request.html abb1410c7dbbdc3a18997ee2486585106 (void) void set_content classpion_1_1http_1_1request.html a343d9892b3a658acd3a28eadb908748d (const std::string &value) void set_content classpion_1_1http_1_1request.html aa3df02baf7762c38c2dbbf04a02526fd (const char *value, size_t size) void set_user classpion_1_1http_1_1request.html abe13dc66982da6ab6cc08ff68710d4af (user_ptr user) user_ptr get_user classpion_1_1http_1_1request.html a0c525f2d99bad69e67353cb2478c6b74 () const virtual void update_first_line classpion_1_1http_1_1request.html a48f4d55f5be5e6bed2936ad8efa8b8ff (void) const virtual void append_cookie_headers classpion_1_1http_1_1request.html a17fbce903b00388346ad85e8b3d997b3 (void) pion::http::request_reader classpion_1_1http_1_1request__reader.html pion::http::reader boost::function3< void, http::request_ptr, tcp::connection_ptr, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1request__reader.html a4cc323f3e852134f2ac785e51e1d623e void set_headers_parsed_callback classpion_1_1http_1_1request__reader.html a858278778288495a8045bee27b2637ab (finished_handler_t &h) static boost::shared_ptr< request_reader > create classpion_1_1http_1_1request__reader.html a889653828718972c32e8671a3b6e29b0 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) request_reader classpion_1_1http_1_1request__reader.html af8900b4977a16edd264bf4c68b1fa327 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) virtual void read_bytes classpion_1_1http_1_1request__reader.html a0414343e9f3376f751230ba4483d74ae (void) virtual void finished_parsing_headers classpion_1_1http_1_1request__reader.html abe3db3cee63f040d4af8ce72263f01f1 (const boost::system::error_code &ec) virtual void finished_reading classpion_1_1http_1_1request__reader.html aeeb55569c505d21767389ddcb5c51633 (const boost::system::error_code &ec) virtual http::message & get_message classpion_1_1http_1_1request__reader.html a62124c27ecd6404e7f1124391adabfd4 (void) http::request_ptr m_http_msg classpion_1_1http_1_1request__reader.html a670ecf2327f01509109043f182a04ab7 finished_handler_t m_finished classpion_1_1http_1_1request__reader.html a035b12eef619e4223c141686c55d2686 finished_handler_t m_parsed_headers classpion_1_1http_1_1request__reader.html ac57f7fe823e1a5c560907fa192b56fd5 pion::http::request_writer classpion_1_1http_1_1request__writer.html pion::http::writer virtual ~request_writer classpion_1_1http_1_1request__writer.html a4e864e362bfa9d132175f80503b32782 () http::request & get_request classpion_1_1http_1_1request__writer.html a16c7f5af36362dbb360fc46fd591c2b2 (void) static boost::shared_ptr< request_writer > create classpion_1_1http_1_1request__writer.html a48f732224837b249560dedbaba56096d (tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t()) static boost::shared_ptr< request_writer > create classpion_1_1http_1_1request__writer.html a2384146dc06aa0340ccbd6014bb0be8a (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t()) request_writer classpion_1_1http_1_1request__writer.html a5d7e26703684a0214af3ce5df33add84 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) request_writer classpion_1_1http_1_1request__writer.html a2b75e1dae183e7d7eaa43adbf8a36584 (tcp::connection_ptr &tcp_conn, http::request_ptr &http_request_ptr, finished_handler_t handler) virtual void prepare_buffers_for_send classpion_1_1http_1_1request__writer.html aeef6096bf4fa008248be93a3c3158c2d (http::message::write_buffers_t &write_buffers) virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1request__writer.html a1ac6c4591f4a936391e78f394e18c9ed (void) virtual void handle_write classpion_1_1http_1_1request__writer.html a8cb6beccbb5f89356be78935f2ca59d4 (const boost::system::error_code &write_error, std::size_t bytes_written) pion::http::response classpion_1_1http_1_1response.html pion::http::message response classpion_1_1http_1_1response.html af459c78b24147ae4bd1bea8c2da2d294 (const http::request &http_request_ptr) response classpion_1_1http_1_1response.html a18b0b58e5ae3a7d885745907e0ac9cd6 (const std::string &request_method) response classpion_1_1http_1_1response.html aa6d18e376129813e953d7b100a82e199 (const response &http_response) response classpion_1_1http_1_1response.html a05a0b5ff4bd220b250b887ce148a6bbc (void) virtual ~response classpion_1_1http_1_1response.html a9802a656f1dc6c0a9ecc706c06167dc6 () virtual void clear classpion_1_1http_1_1response.html a0713749f7a9ac79b6e04a753e7332e83 (void) virtual bool is_content_length_implied classpion_1_1http_1_1response.html ad9e7b85bac1ad8f69145ccc719efd3da (void) const void update_request_info classpion_1_1http_1_1response.html a6a2428e8d529db703e14260fab28f887 (const http::request &http_request) void set_status_code classpion_1_1http_1_1response.html a3f84cd25cec31c9ca4b0b5718f6d58ed (unsigned int n) void set_status_message classpion_1_1http_1_1response.html a0d991f62da50d7bd74c0d21334bec2b9 (const std::string &msg) unsigned int get_status_code classpion_1_1http_1_1response.html a31c291703dda1fd25efc920b9b35fca2 (void) const const std::string & get_status_message classpion_1_1http_1_1response.html a58829c8e1cbb298135fd1c3895b54ba8 (void) const void set_cookie classpion_1_1http_1_1response.html a49aa79083d321eabfc4991aa0194fb09 (const std::string &name, const std::string &value) void set_cookie classpion_1_1http_1_1response.html a5e913a111e16773e2da83adf036a1431 (const std::string &name, const std::string &value, const std::string &path) void set_cookie classpion_1_1http_1_1response.html ad5d56b58acc9a5f93f66f48972749345 (const std::string &name, const std::string &value, const std::string &path, const unsigned long max_age) void set_cookie classpion_1_1http_1_1response.html aca578f57f31824c1f5b04682c5f65883 (const std::string &name, const std::string &value, const unsigned long max_age) void delete_cookie classpion_1_1http_1_1response.html a966ca40fe93496d7eae90b4d6c1afe69 (const std::string &name) void delete_cookie classpion_1_1http_1_1response.html a3886a2d0fc05db863dd23c3269b509eb (const std::string &name, const std::string &path) void set_last_modified classpion_1_1http_1_1response.html a224bbb594892c7a04ada36afa0dc1d1e (const unsigned long t) virtual void update_first_line classpion_1_1http_1_1response.html a2777a77848e97f3ea205ccfaaa06c0bf (void) const virtual void append_cookie_headers classpion_1_1http_1_1response.html ad86616700baf2ba068268b3fd725d5f8 (void) pion::http::response_reader classpion_1_1http_1_1response__reader.html pion::http::reader boost::function3< void, http::response_ptr, tcp::connection_ptr, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1response__reader.html a5ca8a2f566ad6c5f6c6ae264d557944e void set_headers_parsed_callback classpion_1_1http_1_1response__reader.html acbf0d25e943c1947a928970792b6a273 (finished_handler_t &h) static boost::shared_ptr< response_reader > create classpion_1_1http_1_1response__reader.html aebcf3650734f6741d7e051c08a384047 (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) response_reader classpion_1_1http_1_1response__reader.html a6eafb47360b3e50d9cf6c78c4612fcdb (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) virtual void read_bytes classpion_1_1http_1_1response__reader.html a538144396cd3744d01972fe857902c06 (void) virtual void finished_parsing_headers classpion_1_1http_1_1response__reader.html a0108970a1783d3983dbfa16ba5d90e31 (const boost::system::error_code &ec) virtual void finished_reading classpion_1_1http_1_1response__reader.html a775a668c0fa10535ca7bf28103b1fdc6 (const boost::system::error_code &ec) virtual http::message & get_message classpion_1_1http_1_1response__reader.html a9bd4bf810cb215ddf36f6cec31f5d078 (void) http::response_ptr m_http_msg classpion_1_1http_1_1response__reader.html ac06fea6a8b6b5383dacd99c313b6f77d finished_handler_t m_finished classpion_1_1http_1_1response__reader.html aff7c50ffd2cb1748620b6051d8f9233c finished_handler_t m_parsed_headers classpion_1_1http_1_1response__reader.html a1671bc073f332ea3c14a09af89c99c83 pion::http::response_writer classpion_1_1http_1_1response__writer.html pion::http::writer virtual ~response_writer classpion_1_1http_1_1response__writer.html a5e5e539e05550960f3a2819fe5b13a1a () http::response & get_response classpion_1_1http_1_1response__writer.html a65ab6d2a64ac7c76b8bccf4fcf8fc603 (void) static boost::shared_ptr< response_writer > create classpion_1_1http_1_1response__writer.html a75084960d3162f724342ae947e7d07e3 (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t()) static boost::shared_ptr< response_writer > create classpion_1_1http_1_1response__writer.html a6d4e70e5acce84272f8acdc5833320f4 (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler=finished_handler_t()) response_writer classpion_1_1http_1_1response__writer.html a7203e168df87def5ad07cdfa8bae16af (tcp::connection_ptr &tcp_conn, http::response_ptr &http_response_ptr, finished_handler_t handler) response_writer classpion_1_1http_1_1response__writer.html abd234468a489ea3efe1e9280256efddd (tcp::connection_ptr &tcp_conn, const http::request &http_request, finished_handler_t handler) virtual void prepare_buffers_for_send classpion_1_1http_1_1response__writer.html a5f18282e90307978ca33be6c4e4f7bf9 (http::message::write_buffers_t &write_buffers) virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1response__writer.html a95b3d41b77828f8ec14862c03accb58a (void) virtual void handle_write classpion_1_1http_1_1response__writer.html a216d682fd204bd15e92b2babb55c216a (const boost::system::error_code &write_error, std::size_t bytes_written) pion::http::server classpion_1_1http_1_1server.html pion::tcp::server boost::function2< void, http::request_ptr &, tcp::connection_ptr & > request_handler_t classpion_1_1http_1_1server.html a74c41bc6ca8355497abb1401339a1306 boost::function3< void, http::request_ptr &, tcp::connection_ptr &, const std::string & > error_handler_t classpion_1_1http_1_1server.html a699708eee95801f47d59cb9f2279ab4b virtual ~server classpion_1_1http_1_1server.html a5632ccba73177582414d649c6316362d () server classpion_1_1http_1_1server.html a12ed7b808ae35c5e503f9d23d73860d7 (const unsigned int tcp_port=0) server classpion_1_1http_1_1server.html ac63e91762958da5d8122a1be80650382 (const boost::asio::ip::tcp::endpoint &endpoint) server classpion_1_1http_1_1server.html abdfcbc45db2b886e3bfcf0c6b867b0c2 (scheduler &sched, const unsigned int tcp_port=0) server classpion_1_1http_1_1server.html ae84f4442d8bd468a1d77a1c96e29e681 (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) void add_resource classpion_1_1http_1_1server.html a312ad564b529bda2b4ddd12f02fd6d62 (const std::string &resource, request_handler_t request_handler) void remove_resource classpion_1_1http_1_1server.html ac75fe5968f4d5e5c68e6328d483d0794 (const std::string &resource) void add_redirect classpion_1_1http_1_1server.html a114c86a620ac425e4da9ebacebda3f21 (const std::string &requested_resource, const std::string &new_resource) void set_bad_request_handler classpion_1_1http_1_1server.html ae519fa972938c911f02b0ec156615a0d (request_handler_t h) void set_not_found_handler classpion_1_1http_1_1server.html a817a94e4117d2d8616c37b5f8d093e92 (request_handler_t h) void set_error_handler classpion_1_1http_1_1server.html ae88ab890a352b5bb389cbc8e6363e671 (error_handler_t h) virtual void clear classpion_1_1http_1_1server.html af7e7f7b23f1d90d1e1e7171a33b29d7b (void) void set_authentication classpion_1_1http_1_1server.html a5ccee5bdd4d7f59a348dd9475cba7ded (http::auth_ptr auth) void set_max_content_length classpion_1_1http_1_1server.html acf80fa19484a66649c89cf9a23cc9251 (std::size_t n) static std::string strip_trailing_slash classpion_1_1http_1_1server.html a375e54d0970e5d3dfc0eb50f902cf4c9 (const std::string &str) static void handle_bad_request classpion_1_1http_1_1server.html a080297b6789515f60ef8b856d6e0f372 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static void handle_not_found_request classpion_1_1http_1_1server.html ae2484144be6281ac5c1cbbcea99da81b (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn) static void handle_server_error classpion_1_1http_1_1server.html aae06fc86091293ff3168822f0018c183 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg) static void handle_forbidden_request classpion_1_1http_1_1server.html acc9ff11da47156419e059bebdddb5941 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &error_msg) static void handle_method_not_allowed classpion_1_1http_1_1server.html a6c9f8330d4c0569da5f719438dccbc22 (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const std::string &allowed_methods="") virtual void handle_connection classpion_1_1http_1_1server.html a3366fd6be76ebb5ade34413be330aa6a (tcp::connection_ptr &tcp_conn) virtual void handle_request classpion_1_1http_1_1server.html ad3e6180d412e8d2f135423e7e15f43ea (http::request_ptr &http_request_ptr, tcp::connection_ptr &tcp_conn, const boost::system::error_code &ec) virtual bool find_request_handler classpion_1_1http_1_1server.html a2a0e8e0c21438a9928e680cb0d94430c (const std::string &resource, request_handler_t &request_handler) const pion::http::types structpion_1_1http_1_1types.html virtual ~types structpion_1_1http_1_1types.html abb9f73024856ac4c582259781a70b02b () static std::string get_date_string structpion_1_1http_1_1types.html a7772dbeb3b5bdde2387f8899d358087e (const time_t t) static std::string make_query_string structpion_1_1http_1_1types.html aa8d84f3f7199fc20715d67d096ecfa9b (const ihash_multimap &query_params) static std::string make_set_cookie_header structpion_1_1http_1_1types.html a1908960aabfff3e1c263018f659f62c0 (const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0) static const std::string STRING_EMPTY structpion_1_1http_1_1types.html ac329dd732e03e0a0b1651a84d629280d static const std::string STRING_CRLF structpion_1_1http_1_1types.html a2716c2eefa7527fd8e342f82cc45f1b8 static const std::string STRING_HTTP_VERSION structpion_1_1http_1_1types.html a432751abff7daf4f043a8f48a0a9e326 static const std::string HEADER_NAME_VALUE_DELIMITER structpion_1_1http_1_1types.html a483a9875308673605d6f9e826a374970 static const std::string COOKIE_NAME_VALUE_DELIMITER structpion_1_1http_1_1types.html a8f2d833388e71b234d388a1f2770480a static const std::string HEADER_HOST structpion_1_1http_1_1types.html a841eb803243259e069139fa6dcd51754 static const std::string HEADER_COOKIE structpion_1_1http_1_1types.html a0d1f132b8dbf10181c0d05ebaaf0ebb0 static const std::string HEADER_SET_COOKIE structpion_1_1http_1_1types.html a70871332398ee2aedfc481277d734a58 static const std::string HEADER_CONNECTION structpion_1_1http_1_1types.html a86316d32031150a01bd2c19e92303967 static const std::string HEADER_CONTENT_TYPE structpion_1_1http_1_1types.html af5e0cb6e2855a5d0e0f46dbe177799a5 static const std::string HEADER_CONTENT_LENGTH structpion_1_1http_1_1types.html aa942d4adb41ec6b7418615f2cf84670d static const std::string HEADER_CONTENT_LOCATION structpion_1_1http_1_1types.html af5f9c5484ed5334c2cd33cfacb353288 static const std::string HEADER_CONTENT_ENCODING structpion_1_1http_1_1types.html aed13bd484d84e216c96b056fea7a7527 static const std::string HEADER_CONTENT_DISPOSITION structpion_1_1http_1_1types.html a514e757b37679add3b57c88209e46ab3 static const std::string HEADER_LAST_MODIFIED structpion_1_1http_1_1types.html a9873e0461ffbdace4e7d6cbe007ba3ed static const std::string HEADER_IF_MODIFIED_SINCE structpion_1_1http_1_1types.html a33ecae14c2b1ab25c04a823e14571d7c static const std::string HEADER_TRANSFER_ENCODING structpion_1_1http_1_1types.html a3b39d44f38cbc04b75cfd4d9c0e5b18a static const std::string HEADER_LOCATION structpion_1_1http_1_1types.html a3d86eec9408f000aa26f84f7f6e4a098 static const std::string HEADER_AUTHORIZATION structpion_1_1http_1_1types.html a631e29eb1f859c41ae65a6a2861e60ac static const std::string HEADER_REFERER structpion_1_1http_1_1types.html a39efd8df51b418623d822f156b4b7e05 static const std::string HEADER_USER_AGENT structpion_1_1http_1_1types.html af910e9d9d8748d77d5f3a5b79c459b77 static const std::string HEADER_X_FORWARDED_FOR structpion_1_1http_1_1types.html ab9ddd93284acb0162b389e465708fb1d static const std::string HEADER_CLIENT_IP structpion_1_1http_1_1types.html abdbd353ba458a132ef432bcbffa02f75 static const std::string CONTENT_TYPE_HTML structpion_1_1http_1_1types.html a02850c07dccf6c375ee662bb46cbcfed static const std::string CONTENT_TYPE_TEXT structpion_1_1http_1_1types.html a503a1918d9f37cc4ec6bd4229d3952bf static const std::string CONTENT_TYPE_XML structpion_1_1http_1_1types.html a49900068a6ffb8699df017f689a3bdb9 static const std::string CONTENT_TYPE_URLENCODED structpion_1_1http_1_1types.html a7c3a7283e007c9666c2e97ad9b5eecfa static const std::string CONTENT_TYPE_MULTIPART_FORM_DATA structpion_1_1http_1_1types.html ab85889d9ccd680e47988646d290b0725 static const std::string REQUEST_METHOD_HEAD structpion_1_1http_1_1types.html af988464448ca2741b8277b464ade4d16 static const std::string REQUEST_METHOD_GET structpion_1_1http_1_1types.html a41df465e1665956a34c25401943c8a1f static const std::string REQUEST_METHOD_PUT structpion_1_1http_1_1types.html a3740184a9ca3686a2e7ec0a6a5869971 static const std::string REQUEST_METHOD_POST structpion_1_1http_1_1types.html a31458141c7a1704b8e24fbfaa0f92e6c static const std::string REQUEST_METHOD_DELETE structpion_1_1http_1_1types.html a442f3bad1e148210bc02b364a13bd703 static const std::string RESPONSE_MESSAGE_OK structpion_1_1http_1_1types.html a0aaeb54afab3950bd0c36e6213e997be static const std::string RESPONSE_MESSAGE_CREATED structpion_1_1http_1_1types.html aebc4500ff17c3fe3c89f81ef24da765f static const std::string RESPONSE_MESSAGE_ACCEPTED structpion_1_1http_1_1types.html ae73856adf6fa589178d5c88cd6285974 static const std::string RESPONSE_MESSAGE_NO_CONTENT structpion_1_1http_1_1types.html aa883de68ebea3c99a630f506acbc15ad static const std::string RESPONSE_MESSAGE_FOUND structpion_1_1http_1_1types.html a3c4967430712b0756c053c3cdd7a8494 static const std::string RESPONSE_MESSAGE_UNAUTHORIZED structpion_1_1http_1_1types.html a587d94bed01177054387f448b7c5287c static const std::string RESPONSE_MESSAGE_FORBIDDEN structpion_1_1http_1_1types.html ab08701ef8170cbb0514f813f3846dd7d static const std::string RESPONSE_MESSAGE_NOT_FOUND structpion_1_1http_1_1types.html a2a3504c60731df6c0aa6f77b4aeb0b23 static const std::string RESPONSE_MESSAGE_METHOD_NOT_ALLOWED structpion_1_1http_1_1types.html ae21baafd36761b8bb82a2c06c5565cf1 static const std::string RESPONSE_MESSAGE_NOT_MODIFIED structpion_1_1http_1_1types.html ade4b1c7fb04dbf6b323a21f7d1959330 static const std::string RESPONSE_MESSAGE_BAD_REQUEST structpion_1_1http_1_1types.html a8b1ca932d6f4b9061bef4e7cc3fca724 static const std::string RESPONSE_MESSAGE_SERVER_ERROR structpion_1_1http_1_1types.html a27379812e3cfc86bf6ef43e873b25231 static const std::string RESPONSE_MESSAGE_NOT_IMPLEMENTED structpion_1_1http_1_1types.html ad65de0d9732bfdb57998871b071c4aba static const std::string RESPONSE_MESSAGE_CONTINUE structpion_1_1http_1_1types.html acb63fcfb74186e6fed84492d02735417 static const unsigned int RESPONSE_CODE_OK structpion_1_1http_1_1types.html a5f5e6e1a214b3b91313843fa8f36cc4c static const unsigned int RESPONSE_CODE_CREATED structpion_1_1http_1_1types.html a72a0af74251c62d7271f70369c0b7c55 static const unsigned int RESPONSE_CODE_ACCEPTED structpion_1_1http_1_1types.html ad6627bcaec2488da093e8ad6ebd8bc22 static const unsigned int RESPONSE_CODE_NO_CONTENT structpion_1_1http_1_1types.html ab31ecbc138d67e5e098e16bc21c55bd4 static const unsigned int RESPONSE_CODE_FOUND structpion_1_1http_1_1types.html ab24b9a4098bce2885dfd3e2eb846a901 static const unsigned int RESPONSE_CODE_UNAUTHORIZED structpion_1_1http_1_1types.html a04e9680b7d896983fefe6d256d54094d static const unsigned int RESPONSE_CODE_FORBIDDEN structpion_1_1http_1_1types.html a5d02faf5aa46957db9b4d01f6134c7c9 static const unsigned int RESPONSE_CODE_NOT_FOUND structpion_1_1http_1_1types.html af6392ad941d01c446d95999252888f45 static const unsigned int RESPONSE_CODE_METHOD_NOT_ALLOWED structpion_1_1http_1_1types.html afdaf4bd3e562cc81ac01e4261d190b60 static const unsigned int RESPONSE_CODE_NOT_MODIFIED structpion_1_1http_1_1types.html a6479482d3538737851c92b5dca0ee2b4 static const unsigned int RESPONSE_CODE_BAD_REQUEST structpion_1_1http_1_1types.html a45e55c48104a6511f28467d8f44bb48c static const unsigned int RESPONSE_CODE_SERVER_ERROR structpion_1_1http_1_1types.html a685d49b20c27b0d2b9365edd374416b9 static const unsigned int RESPONSE_CODE_NOT_IMPLEMENTED structpion_1_1http_1_1types.html a633343f33f232ed411511ec18f112d7c static const unsigned int RESPONSE_CODE_CONTINUE structpion_1_1http_1_1types.html a65920fc72bb4d4d9b7c44b3f7fa8f539 pion::http::writer classpion_1_1http_1_1writer.html pion::http::writer::binary_cache_t virtual ~writer classpion_1_1http_1_1writer.html ae8a84fa8012af64f2b5c22582f37f0ef () void clear classpion_1_1http_1_1writer.html a17e88be48ecde04b8dbe54239a14dc25 (void) void write classpion_1_1http_1_1writer.html a5bd3e415e5490cf68bdb9636620e49b4 (const T &data) void write classpion_1_1http_1_1writer.html aaa847dd2364e85844395fc4815a654ca (std::ostream &(*iomanip)(std::ostream &)) void write classpion_1_1http_1_1writer.html a8b0b29526fb03597934145eb9f21e932 (const void *data, size_t length) void write_no_copy classpion_1_1http_1_1writer.html ad82908f247f558770c6c4d9f58d2a5f2 (const std::string &data) void write_no_copy classpion_1_1http_1_1writer.html a33832b2c08f3696a50614d0ad3c886a9 (void *data, size_t length) void send classpion_1_1http_1_1writer.html a6c96aa95d710babcf5096d8294f703d5 (void) void send classpion_1_1http_1_1writer.html a116467a20091c4a6a76aee0d9975f15b (SendHandler send_handler) void send_chunk classpion_1_1http_1_1writer.html a5f706e22dcd821092dd256248b3ba474 (SendHandler send_handler) void send_final_chunk classpion_1_1http_1_1writer.html ab95475d6a9a21a94a8eff798ecf37b14 (SendHandler send_handler) void send_final_chunk classpion_1_1http_1_1writer.html a902953ed4ab1f0a009f8fc4517735351 (void) tcp::connection_ptr & get_connection classpion_1_1http_1_1writer.html ae65148e4a1e72266e64c4ab1ceed2c17 (void) size_t get_content_length classpion_1_1http_1_1writer.html a980285662a960320b561e419563a83e2 (void) const void supports_chunked_messages classpion_1_1http_1_1writer.html ae2d856d25a3e4859d3f5f86d4d269364 (bool b) bool supports_chunked_messages classpion_1_1http_1_1writer.html ab7a31c41238ac7524eb8a2cc461a153b () const bool sending_chunked_message classpion_1_1http_1_1writer.html a7a9f95f0cc0ccf1d091a94d5ba5ecebc () const void set_logger classpion_1_1http_1_1writer.html a25f0a6f75c22eb95d619ae600c0f2121 (logger log_ptr) logger get_logger classpion_1_1http_1_1writer.html a58c000ca432c7c168ebd666f4bd17c30 (void) boost::function1< void, const boost::system::error_code & > finished_handler_t classpion_1_1http_1_1writer.html a7e3ce4b88e0427adf673a99fca3af982 boost::function2< void, const boost::system::error_code &, std::size_t > write_handler_t classpion_1_1http_1_1writer.html a36fa31c850362d907559a0c1157a1bf3 writer classpion_1_1http_1_1writer.html a50963534a051029e1645ce6386774192 (tcp::connection_ptr &tcp_conn, finished_handler_t handler) virtual void handle_write classpion_1_1http_1_1writer.html a8bf871122153a6048ca5b21cacf5310c (const boost::system::error_code &write_error, std::size_t bytes_written)=0 virtual void prepare_buffers_for_send classpion_1_1http_1_1writer.html ab7a583948d97402772dc1fe2e87bcf66 (http::message::write_buffers_t &write_buffers)=0 virtual write_handler_t bind_to_write_handler classpion_1_1http_1_1writer.html acea77b1d3cd2af31f4f1f410900aa207 (void)=0 void finished_writing classpion_1_1http_1_1writer.html a28a73762ddc3c59091aa44d10adad5ea (const boost::system::error_code &ec) pion::plugins::AllowNothingService classpion_1_1plugins_1_1_allow_nothing_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_allow_nothing_service.html ad2d81ee952406b541dae3c482cd564a9 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::CookieService classpion_1_1plugins_1_1_cookie_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_cookie_service.html a22b641486c3d9aa0a952268ea5cea444 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::EchoService classpion_1_1plugins_1_1_echo_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_echo_service.html ad9cd0b8b88039e2f08bc4333fc576656 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::DiskFile classpion_1_1plugins_1_1_disk_file.html DiskFile classpion_1_1plugins_1_1_disk_file.html a06b1d484c4da504c93b654b45dcd79a6 (void) DiskFile classpion_1_1plugins_1_1_disk_file.html ae10735756b815f54695395689fd8ea74 (const boost::filesystem::path &path, char *content, unsigned long size, std::time_t modified, const std::string &mime) DiskFile classpion_1_1plugins_1_1_disk_file.html a7797fe60cf1bc8599eeb6a6eeabf7283 (const DiskFile &f) void update classpion_1_1plugins_1_1_disk_file.html ab139af7298f05de181f07fb0ecc4f7e4 (void) void read classpion_1_1plugins_1_1_disk_file.html aaa53b41c7c20d2615d445a90fa088636 (void) bool checkUpdated classpion_1_1plugins_1_1_disk_file.html ada8bf6e3c5f225b11a69c5a0efd47c30 (void) const boost::filesystem::path & getFilePath classpion_1_1plugins_1_1_disk_file.html a5a70cb52e6d8626c70b4b5632d3f0ce5 (void) const char * getFileContent classpion_1_1plugins_1_1_disk_file.html ad5427b8069d1d6843024598594e23874 (void) bool hasFileContent classpion_1_1plugins_1_1_disk_file.html ae843f23a6a94d61a45422c9441b39200 (void) const unsigned long getFileSize classpion_1_1plugins_1_1_disk_file.html a31ef9453375d649069d29e37773c0283 (void) const std::time_t getLastModified classpion_1_1plugins_1_1_disk_file.html aea7d64b667421c6a6c58c7e53409bc70 (void) const const std::string & getLastModifiedString classpion_1_1plugins_1_1_disk_file.html a78281a91c2084ebbf516016f2604ebe3 (void) const const std::string & getMimeType classpion_1_1plugins_1_1_disk_file.html a9056fa1495c9280606960c0c0c959539 (void) const void setFilePath classpion_1_1plugins_1_1_disk_file.html ab033df22506e172bd87e6eb327a9a0f7 (const boost::filesystem::path &p) void appendFilePath classpion_1_1plugins_1_1_disk_file.html a0fda9b61a92172c12478d3c8171511be (const std::string &p) void setMimeType classpion_1_1plugins_1_1_disk_file.html ac117af46a398de30b6fb64c2dc30e0ef (const std::string &t) void resetFileContent classpion_1_1plugins_1_1_disk_file.html aa5dafe64a4c18e2402b777d8c948990f (unsigned long n=0) boost::filesystem::path m_file_path classpion_1_1plugins_1_1_disk_file.html abcfc6460826ee37ab680a6e4282f2cb6 boost::shared_array< char > m_file_content classpion_1_1plugins_1_1_disk_file.html aa62c842f801d20f9e97c3325777ead1f std::streamsize m_file_size classpion_1_1plugins_1_1_disk_file.html af48e220681d3fb5ed563917aa96ae686 std::time_t m_last_modified classpion_1_1plugins_1_1_disk_file.html ae9e649ded8ea6b84bc4f77f9b5c59534 std::string m_last_modified_string classpion_1_1plugins_1_1_disk_file.html a0db3c1484be194f6967d7ab00fea9c9f std::string m_mime_type classpion_1_1plugins_1_1_disk_file.html a4d07f1a3a0ab328fcb42887497c3ab6e pion::plugins::DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html virtual ~DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html a01779adb0fae6341d6b5b349bc893057 () void send classpion_1_1plugins_1_1_disk_file_sender.html adab16e17f7cf8f315965138d30d8db3d (void) void set_logger classpion_1_1plugins_1_1_disk_file_sender.html a3923cd6ecdaa8f83ed219e78f3b0a976 (logger log_ptr) logger get_logger classpion_1_1plugins_1_1_disk_file_sender.html ad9e6e934763bd5518270d2eb7d21b394 (void) static boost::shared_ptr< DiskFileSender > create classpion_1_1plugins_1_1_disk_file_sender.html a206bc98eed2c722e3cd81e754a0e13a5 (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size=0) DiskFileSender classpion_1_1plugins_1_1_disk_file_sender.html a41d8c1f071301ddacd0d6dc5b5f5197f (DiskFile &file, pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn, unsigned long max_chunk_size) void handle_write classpion_1_1plugins_1_1_disk_file_sender.html ae646f10871d31268170411d31b1274e3 (const boost::system::error_code &write_error, std::size_t bytes_written) logger m_logger classpion_1_1plugins_1_1_disk_file_sender.html ac02b0ced6bef85a9e82323e813dfd4e0 pion::plugins::FileService classpion_1_1plugins_1_1_file_service.html pion::http::plugin_service virtual void set_option classpion_1_1plugins_1_1_file_service.html a9a2e7ce1dd455a7213bae7c2e47e8a13 (const std::string &name, const std::string &value) virtual void operator() classpion_1_1plugins_1_1_file_service.html a98a2a90a2a8846e94c737a34902644fc (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) virtual void start classpion_1_1plugins_1_1_file_service.html a9ba023821844c174e268d4c04a0ee2bc (void) virtual void stop classpion_1_1plugins_1_1_file_service.html a99259cf6308a2745943f4e6e45976c26 (void) void set_logger classpion_1_1plugins_1_1_file_service.html a33990e40c5c80e10b70ea29dc5bfaba3 (logger log_ptr) logger get_logger classpion_1_1plugins_1_1_file_service.html aeb189cb25aacc0ad89031043610c751e (void) PION_HASH_MAP< std::string, DiskFile, PION_HASH_STRING > CacheMap classpion_1_1plugins_1_1_file_service.html a06d3f20537e992038c15ed362470b5af PION_HASH_MAP< std::string, std::string, PION_HASH_STRING > MIMETypeMap classpion_1_1plugins_1_1_file_service.html ad39a3a2dd8b7f6753093e803c76b5b36 void scanDirectory classpion_1_1plugins_1_1_file_service.html a846472efdb9cf091b66ac941863bbc65 (const boost::filesystem::path &dir_path) std::pair< CacheMap::iterator, bool > addCacheEntry classpion_1_1plugins_1_1_file_service.html accda870fc20d08e689e394dc3d780eef (const std::string &relative_path, const boost::filesystem::path &file_path, const bool placeholder) void sendNotFoundResponse classpion_1_1plugins_1_1_file_service.html ab701cf982801ca3b88a7681b69e3ec54 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) static std::string findMIMEType classpion_1_1plugins_1_1_file_service.html a80482b4687642f4d777956c73de6a3e6 (const std::string &file_name) logger m_logger classpion_1_1plugins_1_1_file_service.html a6ca4dbf4a8c1658f330a034842d12b89 pion::plugins::HelloService classpion_1_1plugins_1_1_hello_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_hello_service.html a5336f34d58cf62045897d0d6fc0b2b38 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) pion::plugins::LogServiceAppender classpion_1_1plugins_1_1_log_service_appender.html void setMaxEvents classpion_1_1plugins_1_1_log_service_appender.html a3b63273c186d923980e6311815a0ac5d (unsigned int n) void addLogString classpion_1_1plugins_1_1_log_service_appender.html a70d9bdf5d9e753ee15a6eadac036baf2 (const std::string &log_string) void writeLogEvents classpion_1_1plugins_1_1_log_service_appender.html a6b7c94ef166af29094bfe93ca9a2038b (pion::http::response_writer_ptr &writer) pion::plugins::LogService classpion_1_1plugins_1_1_log_service.html pion::http::plugin_service virtual void operator() classpion_1_1plugins_1_1_log_service.html ad0f2602a20fd26a51f4cc64e3d6bcae5 (pion::http::request_ptr &http_request_ptr, pion::tcp::connection_ptr &tcp_conn) LogServiceAppender & getLogAppender classpion_1_1plugins_1_1_log_service.html a9ecc41077ab7d1f52a21a54fde62b166 (void) pion::spdy::decompressor classpion_1_1spdy_1_1decompressor.html data_size_t classpion_1_1spdy_1_1decompressor.html a9fb34f033b4d95e5f23fa9b0d03c4818 MAX_UNCOMPRESSED_DATA_BUF_SIZE classpion_1_1spdy_1_1decompressor.html a9fb34f033b4d95e5f23fa9b0d03c4818a44ab53316cb7bd9c9d66621b6e537e08 decompressor classpion_1_1spdy_1_1decompressor.html ab60b284101b5b7ffedc2fb4daab2f77d () ~decompressor classpion_1_1spdy_1_1decompressor.html adc518d8ec91bb78d58077f7fb661881f () char * decompress classpion_1_1spdy_1_1decompressor.html a9e6e8b557657365b9e30a501c9bdd00b (const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info &frame, boost::uint32_t header_block_length) bool spdy_decompress_header classpion_1_1spdy_1_1decompressor.html ab6c148eb985c1e016235cef3863913c8 (const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t &uncomp_length) pion::spdy::parser classpion_1_1spdy_1_1parser.html pion::spdy::parser::error_category_t error_value_t classpion_1_1spdy_1_1parser.html abaab54ece6835d5763900809a1d6915b parser classpion_1_1spdy_1_1parser.html a289c7ef60496f20705af20bec52d5302 () ~parser classpion_1_1spdy_1_1parser.html a4cc2b6ef5639870a53ba9b7a816424fc () boost::tribool parse classpion_1_1spdy_1_1parser.html a824b2f98f915c0402c75c50e33af1d4f (http_protocol_info &http_headers, boost::system::error_code &ec, decompressor_ptr &decompressor, const char *packet_ptr, boost::uint32_t &length_packet, boost::uint32_t current_stream_count) const char * get_spdy_data_content classpion_1_1spdy_1_1parser.html aa3822674ceaa040a6ad36189fbc58744 () const char * get_spdy_read_pointer classpion_1_1spdy_1_1parser.html a0027e6ba54dd393ba32b1a5f8e80aa1d () static spdy_frame_type get_spdy_frame_type classpion_1_1spdy_1_1parser.html afa6e6079f12d6adc17688b38bc0727dd (const char *ptr) static bool is_spdy_control_frame classpion_1_1spdy_1_1parser.html a9d162f5bb587fe627f678a9ab19dd712 (const char *ptr) static boost::uint32_t get_control_frame_stream_id classpion_1_1spdy_1_1parser.html a472c57e8a77ee5ad056ef11fe5aad50e (const char *ptr) void set_read_ptr classpion_1_1spdy_1_1parser.html a84d142819f982415844b77f5c3d8d0bb (const char *ptr) bool populate_frame classpion_1_1spdy_1_1parser.html aa0000b4cee0f8a2084f3e0056ab561de (boost::system::error_code &ec, spdy_control_frame_info &frame, boost::uint32_t &length_packet, boost::uint32_t &stream_id, http_protocol_info &http_headers) void parse_header_payload classpion_1_1spdy_1_1parser.html a76731f8ae345f1a5af910e5e92b64bbe (boost::system::error_code &ec, decompressor_ptr &decompressor, const spdy_control_frame_info &frame, http_protocol_info &http_headers, boost::uint32_t current_stream_count) void parse_spdy_data classpion_1_1spdy_1_1parser.html aae6750b7a90921dd6d8bc2da50cc1aa7 (boost::system::error_code &ec, const spdy_control_frame_info &frame, boost::uint32_t stream_id, http_protocol_info &http_info) void parse_spdy_settings_frame classpion_1_1spdy_1_1parser.html a36bd7ae76e3796cf4f99a30aa728c800 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_rst_stream classpion_1_1spdy_1_1parser.html ad69dd18af5afc1b6d84d743c3d21d8e0 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_ping_frame classpion_1_1spdy_1_1parser.html a22199322320ed1a68407b438a898d98b (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_goaway_frame classpion_1_1spdy_1_1parser.html ae213965a7a77b4cfb385bfa8685c3e50 (boost::system::error_code &ec, const spdy_control_frame_info &frame) void parse_spdy_window_update_frame classpion_1_1spdy_1_1parser.html a0ce476c60751c29909aec2af32b5b64e (boost::system::error_code &ec, const spdy_control_frame_info &frame) boost::tribool parse_spdy_frame classpion_1_1spdy_1_1parser.html a7fa079f8501944f9d55f2054f896d08a (boost::system::error_code &ec, decompressor_ptr &decompressor, http_protocol_info &http_headers, boost::uint32_t &length_packet, boost::uint32_t current_stream_count) static void create_error_category classpion_1_1spdy_1_1parser.html a81f25358fc4fbffeb6532cf10c6f7aa4 (void) static error_category_t & get_error_category classpion_1_1spdy_1_1parser.html aba54c4e506d27521190271a35f020257 (void) static void set_error classpion_1_1spdy_1_1parser.html a8caaf3917f65aeab5feee513e8b656b5 (boost::system::error_code &ec, error_value_t ev) pion::spdy::parser::error_category_t classpion_1_1spdy_1_1parser_1_1error__category__t.html const char * name classpion_1_1spdy_1_1parser_1_1error__category__t.html a6ef5ae1be50c4354025c754c28bee948 () const BOOST_SYSTEM_NOEXCEPT std::string message classpion_1_1spdy_1_1parser_1_1error__category__t.html a89956154b900ad8cfa578041c11c20de (int ev) const pion::spdy::spdy_control_frame_info structpion_1_1spdy_1_1spdy__control__frame__info.html bool control_bit structpion_1_1spdy_1_1spdy__control__frame__info.html aab8a4df01cd7ab33225e75d3f2d6eac2 boost::uint16_t version structpion_1_1spdy_1_1spdy__control__frame__info.html a4616ceeb89c9fc021558ff10d956fa87 boost::uint16_t type structpion_1_1spdy_1_1spdy__control__frame__info.html ac5dcfbebbe23ff86c277c93f6463020c boost::uint8_t flags structpion_1_1spdy_1_1spdy__control__frame__info.html a29431bbcacc702fe6e24ad5f0c11e6b4 boost::uint32_t length structpion_1_1spdy_1_1spdy__control__frame__info.html aae971220edc8d59da5e7b7018e2c7e6d pion::spdy::_spdy_header_info structpion_1_1spdy_1_1__spdy__header__info.html boost::uint32_t stream_id structpion_1_1spdy_1_1__spdy__header__info.html a34f64295be06d0aabaf70142f78e3050 boost::uint8_t * header_block structpion_1_1spdy_1_1__spdy__header__info.html a04e2da993193a952036d13477114bd0e boost::uint8_t header_block_len structpion_1_1spdy_1_1__spdy__header__info.html a0b5e5f60e357c45af5069d8c7e270028 boost::uint16_t frame_type structpion_1_1spdy_1_1__spdy__header__info.html afa1a89722edd7a2eda6fd7a15abf7e76 pion::spdy::_http_protocol_info_t structpion_1_1spdy_1_1__http__protocol__info__t.html std::map< std::string, std::string > http_headers structpion_1_1spdy_1_1__http__protocol__info__t.html aa5fe851be6df6f20882ecfb4b0a17173 boost::uint32_t http_type structpion_1_1spdy_1_1__http__protocol__info__t.html a2b40596ec08c3f01e3b42a3c9f46144f boost::uint32_t stream_id structpion_1_1spdy_1_1__http__protocol__info__t.html a17e4bd218ca2af1c9441c4d78b33c91a boost::uint32_t data_offset structpion_1_1spdy_1_1__http__protocol__info__t.html ac7eaf2e8f75959697589437fa27dff9a boost::uint32_t data_size structpion_1_1spdy_1_1__http__protocol__info__t.html a9f92f9f33b30a85ed7fd1758206d632e bool last_chunk structpion_1_1spdy_1_1__http__protocol__info__t.html ab497d1956139ddbe0773fe6515ef72c7 pion::tcp::connection classpion_1_1tcp_1_1connection.html lifecycle_type classpion_1_1tcp_1_1connection.html a1888aaf31f431a3f00c70c2568f4cb25 boost::function1< void, boost::shared_ptr< connection > > connection_handler classpion_1_1tcp_1_1connection.html aa2b220bff63f258b6aeba7eaf9a39aed boost::array< char, READ_BUFFER_SIZE > read_buffer_type classpion_1_1tcp_1_1connection.html abd482572a19c1aecadaccd360837f7c2 boost::asio::ip::tcp::socket socket_type classpion_1_1tcp_1_1connection.html a353c4d500505d51924d165c28b04641c boost::asio::ssl::stream< boost::asio::ip::tcp::socket > ssl_socket_type classpion_1_1tcp_1_1connection.html aff03c412aa0f3266be30db7619cbf5e0 boost::asio::ssl::context ssl_context_type classpion_1_1tcp_1_1connection.html ae3e4aa69cacf69d2b9907dbda79b1f54 connection classpion_1_1tcp_1_1connection.html a0b2f63b845ee0f7bba3c94c5fb7f567c (boost::asio::io_service &io_service, const bool ssl_flag=false) connection classpion_1_1tcp_1_1connection.html a33326975c04036c79e2481d6e3541c7e (boost::asio::io_service &io_service, ssl_context_type &ssl_context) bool is_open classpion_1_1tcp_1_1connection.html aa454ce0733cbd9bc97d4fe22f2eb8218 (void) const void close classpion_1_1tcp_1_1connection.html a8b52fce50e8987a982c46bc82b463075 (void) void cancel classpion_1_1tcp_1_1connection.html ae0172c7e218f12a0b396a4e0e42e4de2 (void) virtual ~connection classpion_1_1tcp_1_1connection.html a4fbf93efbbb9f67dbe882c33ce3964da () void async_accept classpion_1_1tcp_1_1connection.html a4dbc2bd40cae5d8390014f8f3a175629 (boost::asio::ip::tcp::acceptor &tcp_acceptor, AcceptHandler handler) boost::system::error_code accept classpion_1_1tcp_1_1connection.html a5939637bc376552349938e2be4c72188 (boost::asio::ip::tcp::acceptor &tcp_acceptor) void async_connect classpion_1_1tcp_1_1connection.html a16954eddafc0b5f1383a26f1002faad9 (const boost::asio::ip::tcp::endpoint &tcp_endpoint, ConnectHandler handler) void async_connect classpion_1_1tcp_1_1connection.html a63cac165073687107d415be834a777ca (const boost::asio::ip::address &remote_addr, const unsigned int remote_port, ConnectHandler handler) boost::system::error_code connect classpion_1_1tcp_1_1connection.html a5b183b3389ab9edfe28dbc7eaf352304 (boost::asio::ip::tcp::endpoint &tcp_endpoint) boost::system::error_code connect classpion_1_1tcp_1_1connection.html afd4930565752d4cfc1ea789ca3e87597 (const boost::asio::ip::address &remote_addr, const unsigned int remote_port) boost::system::error_code connect classpion_1_1tcp_1_1connection.html ac80e46e81863a02840a25a3e2ef71b3b (const std::string &remote_server, const unsigned int remote_port) void async_handshake_client classpion_1_1tcp_1_1connection.html a0a68b0891f8af799b624243b3b228832 (SSLHandshakeHandler handler) void async_handshake_server classpion_1_1tcp_1_1connection.html a92e21ae8c6c3203277ca5a8a04a33aac (SSLHandshakeHandler handler) boost::system::error_code handshake_client classpion_1_1tcp_1_1connection.html a09709b4bbd1a43d5902a8df0b4137f2f (void) boost::system::error_code handshake_server classpion_1_1tcp_1_1connection.html ad9306a425d685f91f6465ec8d5617931 (void) void async_read_some classpion_1_1tcp_1_1connection.html a80ba1a628d11e23f923e9f305139c4d2 (ReadHandler handler) void async_read_some classpion_1_1tcp_1_1connection.html a4409f423c5e8864de2fc39183e0d4e6c (ReadBufferType read_buffer, ReadHandler handler) std::size_t read_some classpion_1_1tcp_1_1connection.html af3c5c14c87e99bd40b605b0fb0b4a84e (boost::system::error_code &ec) std::size_t read_some classpion_1_1tcp_1_1connection.html ac65530562f6184e2f61d0c087ab88312 (ReadBufferType read_buffer, boost::system::error_code &ec) void async_read classpion_1_1tcp_1_1connection.html a8ffd85231f17d205e28ed64c222e2d94 (CompletionCondition completion_condition, ReadHandler handler) void async_read classpion_1_1tcp_1_1connection.html a31da6781ff23c07693c3ceff06c4ad83 (const MutableBufferSequence &buffers, CompletionCondition completion_condition, ReadHandler handler) std::size_t read classpion_1_1tcp_1_1connection.html a43fcd89dd89c11590d39eb71837455f3 (CompletionCondition completion_condition, boost::system::error_code &ec) std::size_t read classpion_1_1tcp_1_1connection.html ae333c1f75595e129bb263a9b671c5932 (const MutableBufferSequence &buffers, CompletionCondition completion_condition, boost::system::error_code &ec) void async_write classpion_1_1tcp_1_1connection.html a548cb7fe7ddd1b2961ab90e560a48429 (const ConstBufferSequence &buffers, write_handler_t handler) std::size_t write classpion_1_1tcp_1_1connection.html a7ba752cbf79d2824dcf423a2ed77184a (const ConstBufferSequence &buffers, boost::system::error_code &ec) void finish classpion_1_1tcp_1_1connection.html aa7ff7a6d8325c9cbfb026c1a441523fe (void) bool get_ssl_flag classpion_1_1tcp_1_1connection.html acf7f446c7113617abcff448fbd4ba441 (void) const void set_lifecycle classpion_1_1tcp_1_1connection.html a440cc929ced689cfe4fe4bec0620162c (lifecycle_type t) lifecycle_type get_lifecycle classpion_1_1tcp_1_1connection.html af9000c0fa1af445375f877347de3529a (void) const bool get_keep_alive classpion_1_1tcp_1_1connection.html a35394d8c3f144ab8a264824410bb7088 (void) const bool get_pipelined classpion_1_1tcp_1_1connection.html aa54a75a48eae812955f7ce6b2b4c3d51 (void) const read_buffer_type & get_read_buffer classpion_1_1tcp_1_1connection.html a9ffefe15c4ae6acf85e13b315fbfc72b (void) void save_read_pos classpion_1_1tcp_1_1connection.html a7951ebfca8e6834faa78417c5e87a748 (const char *read_ptr, const char *read_end_ptr) void load_read_pos classpion_1_1tcp_1_1connection.html a4cc9d7185adda632de1f3482552ed5f6 (const char *&read_ptr, const char *&read_end_ptr) const boost::asio::ip::tcp::endpoint get_remote_endpoint classpion_1_1tcp_1_1connection.html a63bb4969a3816db01b1e85301ca1af91 (void) const boost::asio::ip::address get_remote_ip classpion_1_1tcp_1_1connection.html a4863b8d10797ef101c95c660007a8c62 (void) const unsigned short get_remote_port classpion_1_1tcp_1_1connection.html a735bcb8b1e2a9d04ad6d12e4f0c6f5a2 (void) const boost::asio::io_service & get_io_service classpion_1_1tcp_1_1connection.html a6bbd6e925e3389cbee18915c9d63a47f (void) socket_type & get_socket classpion_1_1tcp_1_1connection.html a4a237acacf373637c95d2cbd24e42e74 (void) ssl_socket_type & get_ssl_socket classpion_1_1tcp_1_1connection.html a0f3ba6ecd1f402e1e379db5440ecda94 (void) const socket_type & get_socket classpion_1_1tcp_1_1connection.html a16cef7660bcf80131d007351defe10a5 (void) const const ssl_socket_type & get_ssl_socket classpion_1_1tcp_1_1connection.html a8d3d2ec0d67d53b0a5d23ba3ca00dae8 (void) const static boost::shared_ptr< connection > create classpion_1_1tcp_1_1connection.html a5e9118f2f2f31b834f04d22a058fd1eb (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler) connection classpion_1_1tcp_1_1connection.html a7e1f15340d3c9e593fdd15764c50dd15 (boost::asio::io_service &io_service, ssl_context_type &ssl_context, const bool ssl_flag, connection_handler finished_handler) pion::tcp::server classpion_1_1tcp_1_1server.html virtual ~server classpion_1_1tcp_1_1server.html a728020c37ae9ec06197d01b195a24f9e () void start classpion_1_1tcp_1_1server.html ad01034396caf2a31566c547d85478ea5 (void) void stop classpion_1_1tcp_1_1server.html a855d4cd90004c47b924eab1fe0ffaa14 (bool wait_until_finished=false) void join classpion_1_1tcp_1_1server.html a50495c432f7a3441654b2d41a6f942a7 (void) void set_ssl_key_file classpion_1_1tcp_1_1server.html a0d74cb19ac80dfc81cd92272f9f82905 (const std::string &pem_key_file) std::size_t get_connections classpion_1_1tcp_1_1server.html aa56c4aebede625c3c70617552d0f08af (void) const unsigned int get_port classpion_1_1tcp_1_1server.html a46c1027475b8748e2a3047c7b738ef0b (void) const void set_port classpion_1_1tcp_1_1server.html a392e9ede66cf2f96af52655363951e96 (unsigned int p) boost::asio::ip::address get_address classpion_1_1tcp_1_1server.html a4ed7743219642eb5969e3599403ad99f (void) const void set_address classpion_1_1tcp_1_1server.html aa711c8de12d16c2806dc5fe57bed512e (const boost::asio::ip::address &addr) const boost::asio::ip::tcp::endpoint & get_endpoint classpion_1_1tcp_1_1server.html adb38f532cf2c4f798c10a9273e7af436 (void) const void set_endpoint classpion_1_1tcp_1_1server.html a2f460aa6795aa6169c1b1fca5c4daa21 (const boost::asio::ip::tcp::endpoint &ep) bool get_ssl_flag classpion_1_1tcp_1_1server.html a90c7fd50d43652de3f283988380968bb (void) const void set_ssl_flag classpion_1_1tcp_1_1server.html ac6bb13e1f833a39b28bff7fa71029476 (bool b=true) connection::ssl_context_type & get_ssl_context_type classpion_1_1tcp_1_1server.html a11201c6b34424ff5ec11c963629281ed (void) bool is_listening classpion_1_1tcp_1_1server.html acf9efd8fcf78fc352744489e388b0f7c (void) const void set_logger classpion_1_1tcp_1_1server.html abe68393818a75e45d49757532802361e (logger log_ptr) logger get_logger classpion_1_1tcp_1_1server.html af038c70801875d3d6a3826eb7a80b1c3 (void) boost::asio::ip::tcp::acceptor & get_acceptor classpion_1_1tcp_1_1server.html a41d5b598e52f70db5ae4302bb02370b8 (void) const boost::asio::ip::tcp::acceptor & get_acceptor classpion_1_1tcp_1_1server.html a98de565795e8a1e978d21e7232990efe (void) const server classpion_1_1tcp_1_1server.html a2129bce03fd902c051e2a4b96d6bdf49 (const unsigned int tcp_port) server classpion_1_1tcp_1_1server.html a0e08d42a00d597952109e6a739942e94 (const boost::asio::ip::tcp::endpoint &endpoint) server classpion_1_1tcp_1_1server.html a1ddc1887495e6bf0b236cd424929a1eb (scheduler &sched, const unsigned int tcp_port=0) server classpion_1_1tcp_1_1server.html a1c66625024db0e229eab6d825d8fee2e (scheduler &sched, const boost::asio::ip::tcp::endpoint &endpoint) virtual void handle_connection classpion_1_1tcp_1_1server.html a4ec9c99b1125d0190ceb7850edb77f66 (tcp::connection_ptr &tcp_conn) virtual void before_starting classpion_1_1tcp_1_1server.html a814a44fc3d677071b9e2407898765316 (void) virtual void after_stopping classpion_1_1tcp_1_1server.html a23766baf23b7b5be2e43da55547c3a31 (void) boost::asio::io_service & get_io_service classpion_1_1tcp_1_1server.html a436e6dbcc3b128b2f9a9be6fd99421b6 (void) logger m_logger classpion_1_1tcp_1_1server.html a0fd391b946961fca8604b902ddb06f7d pion::tcp::stream_buffer classpion_1_1tcp_1_1stream__buffer.html char char_type classpion_1_1tcp_1_1stream__buffer.html a1fa60cd7dbf11eebb2983fe2a115a2e4 std::char_traits< char >::int_type int_type classpion_1_1tcp_1_1stream__buffer.html a7dcf4943671520d4018b4468c336e86e std::char_traits< char >::off_type off_type classpion_1_1tcp_1_1stream__buffer.html ac9b79dc64ad2b3e76c121b00ffc6e951 std::char_traits< char >::pos_type pos_type classpion_1_1tcp_1_1stream__buffer.html a3d24ccbacf44098151258b4219f3730c std::char_traits< char > traits_type classpion_1_1tcp_1_1stream__buffer.html a965a21f484cb7a926f7fb80f364c8373 stream_buffer classpion_1_1tcp_1_1stream__buffer.html ad40bca63d47c49ffecacbe3e7c64bbdd (tcp::connection_ptr &conn_ptr) stream_buffer classpion_1_1tcp_1_1stream__buffer.html a0c9993aa8a0c8d85f6808e354c4892b1 (boost::asio::io_service &io_service, const bool ssl_flag=false) stream_buffer classpion_1_1tcp_1_1stream__buffer.html a6ba1babc9c1277e773f4ec5d3087a284 (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context) virtual ~stream_buffer classpion_1_1tcp_1_1stream__buffer.html af72833c05fa921aba4404d3a72edd7cb () connection & get_connection classpion_1_1tcp_1_1stream__buffer.html a9ecf83066d0e3fc5cf9922f4c2f1e24d (void) const connection & get_connection classpion_1_1tcp_1_1stream__buffer.html a4a2d945145898de7c7b0919a97db49bb (void) const void setup_buffers classpion_1_1tcp_1_1stream__buffer.html a02de69010776b51162faa62f3188faa1 (void) int_type flush_output classpion_1_1tcp_1_1stream__buffer.html a3fb6c729f62844f052043c472f92b59f (void) virtual int_type underflow classpion_1_1tcp_1_1stream__buffer.html a94d2c63cb6994188b2628fc09480eb85 (void) virtual int_type overflow classpion_1_1tcp_1_1stream__buffer.html ae36650cd6ed06cee158907766f4e10e7 (int_type c) virtual std::streamsize xsputn classpion_1_1tcp_1_1stream__buffer.html ac61f64d668dd49e4f57d518f500eac61 (const char_type *s, std::streamsize n) virtual std::streamsize xsgetn classpion_1_1tcp_1_1stream__buffer.html a96821e24e504729ff2a48579c208b21a (char_type *s, std::streamsize n) virtual int_type sync classpion_1_1tcp_1_1stream__buffer.html afd7b30acfb1a4c9897ae61e4a6731a58 (void) pion::tcp::stream classpion_1_1tcp_1_1stream.html char char_type classpion_1_1tcp_1_1stream.html a7a1f84f71957c4d181b3956544bed706 std::char_traits< char >::int_type int_type classpion_1_1tcp_1_1stream.html a226831f2baafb1ad65259fc6c9bb511a std::char_traits< char >::off_type off_type classpion_1_1tcp_1_1stream.html a035e53a0425f0f05a3c3fd6c9c8be55d std::char_traits< char >::pos_type pos_type classpion_1_1tcp_1_1stream.html a9a325595e421119b0e6e6b5972863d98 std::char_traits< char > traits_type classpion_1_1tcp_1_1stream.html a6150c81c258841c753e9246b952193bb stream classpion_1_1tcp_1_1stream.html a22c9f4e4071bee3fe41dffd2c2d5e3b3 (tcp::connection_ptr &conn_ptr) stream classpion_1_1tcp_1_1stream.html aee8bf2f4b4af54b0e946552bb3c42cb2 (boost::asio::io_service &io_service, const bool ssl_flag=false) stream classpion_1_1tcp_1_1stream.html a00241ca354c2f8ee48cc2f443c001464 (boost::asio::io_service &io_service, connection::ssl_context_type &ssl_context) boost::system::error_code accept classpion_1_1tcp_1_1stream.html aa9a0601a3f0d969c795b363e9aa932a6 (boost::asio::ip::tcp::acceptor &tcp_acceptor) boost::system::error_code connect classpion_1_1tcp_1_1stream.html a6f420f12a9f3586dba9d9b14632e42b8 (boost::asio::ip::tcp::endpoint &tcp_endpoint) boost::system::error_code connect classpion_1_1tcp_1_1stream.html a81cbfbba0a2849ec2476eee75f1ff9df (const boost::asio::ip::address &remote_addr, const unsigned int remote_port) void close classpion_1_1tcp_1_1stream.html a5d77399767f11fe4ebd7e8ee9e41bf4c (void) bool is_open classpion_1_1tcp_1_1stream.html a4e27277109a8a65e4d8824955a70f495 (void) const bool get_ssl_flag classpion_1_1tcp_1_1stream.html acdd826b93ef7eb171f86f26226f293eb (void) const boost::asio::ip::address get_remote_ip classpion_1_1tcp_1_1stream.html a56bb8792fd97a8cd522a6ba2802730db (void) const stream_buffer * rdbuf classpion_1_1tcp_1_1stream.html a73604ddf5106fd3df9922774a05f4930 (void) pion::tcp::timer classpion_1_1tcp_1_1timer.html timer classpion_1_1tcp_1_1timer.html a8b132dfd2c9dd58a3845f74e292f8848 (tcp::connection_ptr &conn_ptr) void start classpion_1_1tcp_1_1timer.html a010cc63b390056d13a9924d026ae6213 (const boost::uint32_t seconds) void cancel classpion_1_1tcp_1_1timer.html aedd7c27267aecc30be218727c38135bc (void) pion::test::safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html a239efc65e6d0c1f14aae16edc8867664 () virtual ~safe_xml_log_formatter classpion_1_1test_1_1safe__xml__log__formatter.html a33953784f10be2a896f44ea81a083a7d () virtual void log_start classpion_1_1test_1_1safe__xml__log__formatter.html aa075ccbb2c9b5d65e181823b51e37af5 (std::ostream &ostr, boost::unit_test::counter_t test_cases_amount) virtual void log_finish classpion_1_1test_1_1safe__xml__log__formatter.html ab84589991d45d0301487dde76c748cb2 (std::ostream &ostr) virtual void log_build_info classpion_1_1test_1_1safe__xml__log__formatter.html ac97db50c4d84d7c94145fe18a6ba9223 (std::ostream &ostr) virtual void test_unit_start classpion_1_1test_1_1safe__xml__log__formatter.html ab7896861850e8f45508dc4872d860554 (std::ostream &ostr, boost::unit_test::test_unit const &tu) virtual void test_unit_finish classpion_1_1test_1_1safe__xml__log__formatter.html aef89506940d8bd7886f659c158e5c862 (std::ostream &ostr, boost::unit_test::test_unit const &tu, unsigned long elapsed) virtual void test_unit_skipped classpion_1_1test_1_1safe__xml__log__formatter.html aa838459335f68434f0ef4ee01a491caa (std::ostream &ostr, boost::unit_test::test_unit const &tu) virtual void log_exception classpion_1_1test_1_1safe__xml__log__formatter.html a8d87cb10851f0ed9b30ddbdd5d2d7650 (std::ostream &ostr, boost::unit_test::log_checkpoint_data const &checkpoint_data, boost::execution_exception const &ex) virtual void log_entry_start classpion_1_1test_1_1safe__xml__log__formatter.html a50eff755ff4bc8ee87d3bdda2370faf6 (std::ostream &ostr, boost::unit_test::log_entry_data const &entry_data, log_entry_types let) virtual void log_entry_value classpion_1_1test_1_1safe__xml__log__formatter.html a812c1c1b93592d1ab11c5273ef4eef97 (std::ostream &ostr, boost::unit_test::const_string value) virtual void log_entry_finish classpion_1_1test_1_1safe__xml__log__formatter.html a9ec475531b42223043b52919ed7c440e (std::ostream &ostr) pion::test::config structpion_1_1test_1_1config.html static std::ofstream m_test_log_file structpion_1_1test_1_1config.html ae238691f6adbe6da8166008f70f4640a pion-5.0.6+dfsg.orig/doc/pion-net.pdf0000644000372000001440000013774012314121350016734 0ustar robertousers%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xI\ ѬU( # d,,SNK%;Nq|$` Tw֦~[~uá~Sp{WÍeT m3ַ]_ߙkEj1kٱ hkl˄+ibfN%42i6Φ[߄a08r-׊74]}򍵝릡 W>>^,Ɔ4l +&.fiFiMәaM3kf^aXmn1MH61Q9fμjI>CUgR &Nǝ4/lƛӸ+5]W~9n8ϰ:gk_N6 n_O7^IMRUz_~9<8 vBUikr:>4CXȌkuW-s7Ȝm-EVXDVEva9kPkv^bwQO]) {(2 "x}וuDJFYH,orvߚ1:{MrsχO^~TG. ?]@r &&g~?kCG_3]$~Q(\mU;R͡G''m&?6ye>>W9Beo'\Di%Jˮ Q\e*HUK\<OwaNF]n8 : evm5" Q[k?~|xۼǐ=gK9Nz K)--pdWL$ uwjЧTLH~G$ŊE41 @\z[fV9gqdIʠM]zZˑFˮZsӲkeqo,{;y.R IA{b 63peDEZbf f H(\g%D <}1hF E-ߒ>Za6geK.=iCms)*ċv, eGn𓖄AԆ뙜H}wx]Ur4XH3y'/;@'>EG<>HWA 4|N%IN1M\7R7v&@99PlEd%0% T5"Le *qXi(b)~1SoS4/ɓb9q>|;]kO_aoE:@xn~:) ;+WI yZ2όސ]ګ9 6b@nrd  0P@/s .t  S"^^6 D[ U]~^\8t/.biыs8wWC[$pWܳǟ?R7ض ѳ )Ӏ=)A&h~f[8׳nbx4Z`HrIޜv56ʰ+ըK70ZN!)Ne:HHӗpg &x6'd8}AEȒpXϫyqt*..RNaT??"6Ӽ^ ʪ@%[j:3e=Vcs$\W#aOR$J#P0mh"]r_xH\o˓UPA9DtEqbWEj C{u%/ &,_{lƨXN92[.x?9SMhH n̙ Uk-+) kj@:L}CGL]l86\l~C'r] pJ L(Ӽπ yQ#Ƕq~GfK]ĘBzh:6p'\yo[N\x'NWzfnuN[JIHV l484((ko}c>A.^sYWXZE ,}f 8%bG;QW_VA3e}>⪤Jt=ѽL5, 津xҔZG$azDF_/<0o:;4ODYQvn;{_"@q{h1ObC;AnR;zw+ /.Cj!9Yp 'DpKLB;k p1'#Y\(dL:n9p=\>Liw lbSmnUim a࠯)`\; y\[/j6Bz,+EB b0=ҟ4sihcA?t5с'A*JdPI(V֦$'*>ZmS&)/"]FMw&+pg9/<2La)6嶘a"ի&(rی-5os=}p@o[yC(9NGoa@ꁞDme-`}m!~5N,Df/xt8&NF۲+Gf O"xea6Q`}G 鿣DJwǬ0rkwSon4x6F1vLcT0YGT˅tQ T 9灧̓JmKĥ!燻*T93LL=(bZr~]0TCn>hlo&>v5zDVpAQd)!I߽o]pF2 OB+oVI>9sSv/5@U'n1uX-^A%;L@I /]0OK3kZӮ1Cߨ~YO3A,h=З- {>u9m86)Q}h"cm.Լ$jZv9D)+ƈnkZoGђ i+6Jz.OC,$t}&:g# tĪ6ڙ}uĂ  J= FHPhW/"WhUֱHɸ ]_X# XGNlK+# ^k]HmZj9 F{Ȧt; .,N'2DDM7B-oYg_rqʑn $K \qr4w&J bl,cJB`FE<*rE6\-1L3q% oKϏn>3$~EȼE8'[7. ҕy^p@F}.荜"j |Q{̠;V .i3 a|=zsY5NqVӑj-=e_ImGb))+-r2+G~F)s&^LJD#@KiuZhi5&!.9T}[B} (, Z>-^RT2F9Se*@Z^qOwcLг Km<@c|DF@Yb28r,5 Z9{vm$:Z"omk'QH~.q֙zc$^[]w`5αjū%=<"i(P`_@Kǫj7bq:$D@pVz+yȢ^./$f5v: ~*198pݔmw$1W=8{ՎZP\j}~?" endstream endobj 5 0 obj 4222 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 730 542] >> endobj 6 0 obj << /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /ColorSpace << /Cs1 7 0 R /Cs2 40 0 R >> /Font << /F1.0 41 0 R /F2.0 42 0 R >> /XObject << /Im4 14 0 R /Im7 20 0 R /Im10 26 0 R /Im14 34 0 R /Im16 38 0 R /Im12 30 0 R /Im1 8 0 R /Im8 22 0 R /Im5 16 0 R /Im9 24 0 R /Im2 10 0 R /Im3 12 0 R /Im11 28 0 R /Im13 32 0 R /Im15 36 0 R /Im6 18 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 43 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 030] endstream endobj 15 0 obj 127 endobj 20 0 obj << /Length 21 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 40 0 R /SMask 45 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 21 0 obj 127 endobj 26 0 obj << /Length 27 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 47 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 27 0 obj 141 endobj 34 0 obj << /Length 35 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 49 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 35 0 obj 141 endobj 38 0 obj << /Length 39 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 51 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 39 0 obj 141 endobj 30 0 obj << /Length 31 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 53 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 31 0 obj 141 endobj 8 0 obj << /Length 9 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace 40 0 R /SMask 55 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`V+ endstream endobj 9 0 obj 120 endobj 22 0 obj << /Length 23 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 57 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 030] endstream endobj 23 0 obj 127 endobj 16 0 obj << /Length 17 0 R /Type /XObject /Subtype /Image /Width 162 /Height 57 /ColorSpace 40 0 R /SMask 59 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om ?@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`w`l6 endstream endobj 17 0 obj 144 endobj 24 0 obj << /Length 25 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 40 0 R /SMask 61 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 25 0 obj 127 endobj 10 0 obj << /Length 11 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace 40 0 R /SMask 63 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 030] endstream endobj 11 0 obj 127 endobj 12 0 obj << /Length 13 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 65 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 13 0 obj 141 endobj 28 0 obj << /Length 29 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 67 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 29 0 obj 141 endobj 32 0 obj << /Length 33 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace 40 0 R /SMask 69 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`i endstream endobj 33 0 obj 141 endobj 36 0 obj << /Length 37 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace 40 0 R /SMask 71 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`V+ endstream endobj 37 0 obj 120 endobj 18 0 obj << /Length 19 0 R /Type /XObject /Subtype /Image /Width 122 /Height 57 /ColorSpace 40 0 R /SMask 73 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`Q~ endstream endobj 19 0 obj 114 endobj 57 0 obj << /Length 58 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홱k`5SjVP"E-bd)K A .R Z_j=] YO^$t^ xL+A F̄f#0 Mр~$F ',$i(j$IZ37!)8iǵg|?P7 ‘(,E¡v;0 L8d l2qc~`Q: OO9\43Ai%1zN:#6yP {:HܰzI~&y %R*W,]%?K2~7E_Yt8 T7-8j6UI,x[ &cR Vjܹn*4YpT{]&t," C ڒFܪ'о Gv&U*!V~V endstream endobj 58 0 obj 751 endobj 51 0 obj << /Length 52 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOYƙaf`0cF>bH?5qj&ۅb{^6w)MWUtm rF쿶gQ[Icw7=y}sN{Z*4ÛBGQpih Dϧ$as #\c<ϷAx<Dz&Ug?fضv!BU 4Q|`h7BTvsYzi(KOv^K wfbz^ } *xXC:Г+kMh{+Dyمdz5[o* e#JxHtq :\zXNޤLXApd>' @(X( i:%_ 8>Iѫ=I6+uʏ D @!1cCP{$je5q V:rt j"(3 6 5 (&BӁ@fe9ZEYTr`Ǫ(Dq,"c-JqjDz)mgvGM򟀏\ +v/ endstream endobj 52 0 obj 1081 endobj 63 0 obj << /Length 64 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOie.LR –R*bKil46%ۥ75-Xmҋ&)[Qc Vl?M}_'Ϝ79<--M~p8?bur1 qQ!BP B$P{(X"+P(2"< p 'HZ(mZZHi!!+T:bAaZFJ!R3O\puZFLp\@3 !824u[bmiM+áد`Eox:MjY+kSݦ4RO`Ǫo nM &LNH$ɼ d<2sT!Vӂ2}5{.,C~y!~ _u[42?"glvZ\Cq59Spx^`b`b^ baqq4g3T] j38=ϯnTUX?74Q/mKӗ4>m=1پTu1i`hVB7_6wvL7"Lϵ\] >RzhyHMOeŷK xfR'.ZJw\Xi{wәIO?J zXPОv"ԃ`*] 8(NJzkwohf7ãVRBc%;8}(~Eâ?) e[@ɔ:>.b)e]|򄔔Qi fAU1RJ℈șvJJlgZD\0h%)bp)I$G$6BP.H<V#Rغ&|0@jǕԊ* (6?~Ζ֊ endstream endobj 64 0 obj 1125 endobj 71 0 obj << /Length 72 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOR{9NYbhx1-GX? M﹙N,eٰde(ϛlSQqO' H(yDBS!0 La("9 %FP\Au()$8nX*SR*HӦjhڨת(L*.*ϗ*=]k=k֫Hy^;`'UfB6w\&q> J0BM[.OJW(]WJ L"<|,UTޮ?1> ԙTrPQk`Ibym3Hzsm9$2k DRknesK짿)^_Mf @J,7Œ﷿|ȷ/W{7.;,:Bz䀔3N_A|q}+ { p‘ɾMD>WQ% .~?wHb *!/(xyKy͌, (;Pv@فet'v'p[Ƈ}}X?V87Gc;`sdlY "@>og6Eپ|2" Qhl8_XyHfB|φB69w tD@V_O #>_Hdllbd)mhǣSx*:~6j|GT4]bٿC}bG$Idf/{W=^ x/62Z &ЖΖ6Oi8Yh)y$RTN fV`JC1W-68Au)J6x[`r%AQ*TRcHIW͕ܽ#Rr C>v/K 7+JsN'<ܘp endstream endobj 72 0 obj 1088 endobj 49 0 obj << /Length 50 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSWe/ʲ+"rY$A_PcʔEIRMMkflRMPXC$JǨqͤM+_2=f߇eg缜>YY><<1' F|% 0DbN"Q6PD"EޗȃE$%a\)PrrHC'`#HZPYM!04 ˪<"q SUA(&ڢbSiPJMFP)IB,!B,Uh eu ֦f\6Zj+K9C*$Źr$-UB9Mbhȵ%u6Ǘ7\=} u\c("Uc#sUϜ{zdb|o_9.T)lAr"XsO=RobH N4DHu_ <IAsbaR KZ{݉酕`$g_ƿyMQ# QV׷̯ ?s?~ZgPĉ@Fmjh32dUxw0w/=eT dwnD9x\z4봖D#D~$=F4<=E10ʌ 3Ow0^≳[O^MSřF龎$>y6f]LfNo^vb_mj{|A$;ϹKSOGIIe8nVC;{ .o;,wN( 斛&B~Z pf٠.Nm]c p_ t٪uFP-or<^b$\+[|Pʚ.u=G~L<9qwFVz2~"Zhjr{K0{?G<:[ h?9P\.wHܮvk^F$l]jswfYzVF0$9DܘWeUzKC#8,UeU2I= DVM 1uZ\Je H*&P$2BRDTe.CN ʂ KŔfBT,K 3Ƭ<r,`0il| aIXA`.=3}udρv endstream endobj 50 0 obj 1156 endobj 53 0 obj << /Length 54 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOwq'ǝCNO֢aX+lݠҹ-A.&V)MK@Y?&}Q36Y~΄w^Oyh*ЪC"AP U CQіQ*tNOH HqQ1lL ]E: A΋f83 4P([\5"7Mnkm&cg%bz79]=wwUG ' 4W]r>,y}W墣~ߐi-&#qVBDG1kRwg^(Sɀ|ke5$^1JеB8;]X\d:8~{im@.<|x MՕR4rV$~AHv~u74ۣg xJo%cdϗ-5+غ'~Zx{h̤ǢC.+vo~,盽}J.E&Gm,R_[x::ɬ~w{#KWՊ9> stream xSk+.,,A@D d\+)R8c9J̤6I8TrJ*ю&Si'=΂ڜ=M|0/g}+@ qU0\,&!uA д 4-H8A|Vɩ U͗!. #xDΪzcsQUr #pnC0FHd9fwqT1˚Qb8p4v,z4cHRgq4;jBrEXVY,QhK_k7r7#VQUHe9N`ZWe5p41j <ݽR2k<4=WFhw{rI<}WOXFb֚bbe $ uCS ?!Xn0(K -'7frك c$Y49`x|Ɨoۗ 4)*_{q{gl\{1q2KbWåHt.]ᒻۛ/磑K bN%9jݖa=~<_)7U ¤MC`4$=;{@aBto3c}Aq8{ޖ{om|§wo x톃ME6O||y=r|~Vgc+:8cP ]yXQ@Xy(6i?[USdU(h-SKq,=}<r[ Le{B=#Spjbd'䱛T2/Π@WVںCã@w2]A38Ũ֓zwuV0D"Y 4|jҰP6 m,*k@tJ0#Q0M `.-*` :"|f,DI)rjN_dB^Us,#%wN̔3  FNKt͜)\Sy$2cG/HJ@P"Hvs_Z endstream endobj 74 0 obj 1095 endobj 69 0 obj << /Length 70 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOw~w' / EPiLpHhgPª(ڙ:YڮT&`jMh0v3wx=8.=xyXy>l<)H4EP% 0 Adq0.@q PDF !IEb4%Dч).+TjM)84ZIhP8[e'e*`0d4JR14c!"y\c9.:j?kd/XHrjkHZMKVFY !n$WgYkCBZ8;p41MLdzjr<mHXVPv%2;}ѹ;VguLE"\~ O>ZXuliQdf֠ yh"x>Nߕq0fN{sr|9_%ϼ+WIr[Pd/cK$8N,{F 4H^bPK̘`|R6TY&O͞&WZWKI>9ȆQ.AIUeFVoGb./SJIf:R"Wkur $rNE܂,JEuBJ,(*(%2i)`:$k A@DR 0Yb6cFGy,a؏Y*la$jʀH:>i_:Hyjv7 endstream endobj 70 0 obj 1178 endobj 65 0 obj << /Length 66 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOgǹo|+g)_=ftl_\lCzĭ(P&4&4(YlQ&MZ[j0_szm.s&~$s<=WD!E1'a( eu8ju$hùҵN! =A1BKIJl#@ujEki)aVJaYFOj"(w8hܝq |[+g7iRWKhw^n#8 KjLfm-`H(njk@5ec?MwE'b09"{iF'56yo:9l*y*2:lF WZ:{ӳ~]>F6K%.Lk'oON۳shVs1e D}7(x]| bq}-d>5l߯ :;L?f &/x;@;<`ٟJw>cg{kcm9;&*c3Kכ*B\Xo$ۑxjSAR)l),>ߖ>V>Ac, 3A.~[|J Y\uBe5 PZD -Ԟ һŊ``UbtVI[= rn4i"M6 =d鋍mmgmJrڻn˿P^IT*$x#YSև 1VO@$ҙJaL:#HA3'Djn~p~0u‘D25 9>e`jµ{A1<?0YA 7Yy?0 HVtv#0ѯ7[G&:Ip.uB!1*PlZI-g9*DuDa 7 0É(L%j- &¥&Qp1Pk8 v܏cq$Qq{Z+7x endstream endobj 66 0 obj 1054 endobj 55 0 obj << /Length 56 0 R /Type /XObject /Subtype /Image /Width 129 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOR{9NYbhx1-GX? M﹙N,eٰde(ϛlSQqO' H(yDBS!0 La("9 %FP\Au()$8nX*SR*HӦjhڨת(L*.*ϗ*=]k=k֫Hy^;`'UfB6w\&q> J0BM[.OJW(]WJ L"<|,UTޮ?1> ԙTrPQk`Ibym3Hzsm9$2k DRknesK짿)^_Mf @J,7Œ﷿|ȷ/W{7.;,:Bz䀔3N_A|q}+ { p‘ɾMD>WQ% .~?wHb *!/(xyKy͌, (;Pv@فet'v'p[Ƈ}}X?V87Gc;`sdlY "@>og6Eپ|2" Qhl8_XyHfB|φB69w tD@V_O #>_Hdllbd)mhǣSx*:~6j|GT4]bٿC}bG$Idf/{W=^ x/62Z &ЖΖ6Oi8Yh)y$RTN fV`JC1W-68Au)J6x[`r%AQ*TRcHIW͕ܽ#Rr C>v/K 7+JsN'<ܘp endstream endobj 56 0 obj 1088 endobj 43 0 obj << /Length 44 0 R /Type /XObject /Subtype /Image /Width 140 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOP׵m(t16c3"f2L2 B! DnF %CEn_Udz~|:O6KɤAPŠ3D@PWA*H!IpRc "p%:i)54  :a S&2,iH($E -j6VSBP͙..x0  )Z垒#4pWU %P[:-z91r\urUTC-jn V+8TaLv/p=RCuE E#%[746R&Ɔn :0Imʆ''#3sp2y=5/iǂ+ך:ƧW?|ե`NǙ^puRi ;:5]߀ûeyYL_ov9l̾hsY4Mpprn>v~75*fUz){[koF·5,Àe+vp||#LJ/KgKQPiٮŵ!hWUE+/7!\%/BN›~'yMWɋ&轈SƱE> stream xO`Żn[Gwa0Ac8nөL  a p8M B,O[Mϗ𦧧m AV" bXZ ,\Kq @E8L5 r*i%Pt8zLZ&g4Zl&K)G% "IJ6͖:`6 -#P1{a F*LV(+RGbki9CR3B{tjU'C\-Mbؓ(dJZr}{T/4T9fFA Y$LCw# T:yGl&FI1f\gZ=jX]Z`PخC!UzKIyӱ/@*lq_Oe3e)p 2xNLϾnb3Cqr>۱ɹK@w*( 1JkW6] G 5zl TUd¡.pUsÑuZ[.Άo_wZs);jZ:ƦՍMZ_n"o8j5M8Op\s|T`\3mǞykc%0䮿u0OM ӸBi"d $aqrIc)dFh-B@X g˿!FvNqx?h:;;vΘhD ƏQM47ā=Zb(ٴiO+ T%> Oy %7%[{[b= 8A 4_2 endstream endobj 60 0 obj 826 endobj 47 0 obj << /Length 48 0 R /Type /XObject /Subtype /Image /Width 161 /Height 56 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOZWǹOp˽YPiiYQ[UMlL)uk3k 3Am]VI[k•:cm:šl 9wr~<^E @b`AQ Thub|8H 0 B0 )$40RVCFBՐU"C p2JVVkCfZdnTd4T2 )pvBKF˩3NP9춓fVNBlaLH2zslըThN`>!QNš+`0#W6NV#²kTcuߌNT,r#<t%MQF8C@ݿ &1R1BJa8OKρiiq|<y\'bI1h̯N+/k_ Jd4&yåI\[^nTQA]sgWwളvO&57(Y\lv)~kN&%N_|N{?߮&fAOY7R;1us3m= d,H,*.5%*)W$(X*X#mr̔؄b1csroqyQi~iZ6MڂњO^n$ٶӤ|_iju_qAbyp㾾Ւ\_,!:(rt(=}p֎ [X\tx4yO#eu͎/SMeⷖu鎾nDb`̱ѫS0יt\C_Y A 锣>7tξC!:E$56 0hYY Q9$-Wo04? rx USLTk4 q(M9D>NT)`E<c|.L ZDz{6lŽtZ37w endstream endobj 48 0 obj 1079 endobj 45 0 obj << /Length 46 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOg9ENF9Xu `EQ&87[lm-jfM* `Mhl%~9~y**@lePDTD",G01K &`@DDJRrZdࡠ)c`ͨ:No02+ B`"gԬq-p,fSARPD$ JY]N8t9:mg8AŲP4a]j6h2\\5FKk76 N >Nzmf_EaκazTk4 蹮H>Ajo{cg|3,NZb,M-27<+z3qpu Y Pim%Ӈw8>μNc.N_Rcl<Y>z Eq0-*Xu`lA=*'TU`Rʟ +UN |u?m+r/TAU*a>AU)Wxj7'=J$cຆ'oD=y~u8:⛏_x':c?A} Xd[N3[Ғ)Ysg蟉w{H&KZZZZk:_ŷC`C~^S]hsFx; VנּPcjT"G=6xQ+=VTI)F g 0= +[AM, s67!o>3pho6jUxAAń56w N~5 EQ>#d ЖK>wp#VRd("~"IճYVU G] '=*0n`S`W|4Kp) CH (  (M!%%Ʌ'_24 endstream endobj 46 0 obj 1104 endobj 61 0 obj << /Length 62 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOg9;8|`_5\ݖby34~#I)-Cb()dwߺz$ %e2齭$dA$*"u}=킠Q HhO;I}=_3R|ϗmcم[*,/Rc"x]D T=N('W=W>cUb$`z `c_kR|w }NgRVP . g[,F( Tֳݠ+ v9BodiRJP!ŭTv ZP![8ʦH$" Y(MfH:σbݨcIhqՂ >d0l8G,0jEP! a $0BQȣ)> stream xOZg978#G.CCѣ-wm5*X[3[+blZ/5e:qi=Y>?𞜐}y(s}#AQ '2PAReu8!&IRR"&04E!b\e/@eUJE&8#qokլBFI"(Зj&s_q &|iɇ<CIc L :NsZXrVW[M]k0qu65VhU2BTL+4zOo_D>yo\km*4|ƘDJ=}w1:r/7:*M6Gr,U׶MMAdvzrldZsj .UhM ׽CM=9 LBM\m\I;ZGha~nbqja$fwWߏOMmw˩*a&;fx$AP\8n' Ljlu6ܟz}0v8fN-[(NTlv^inr@Md.Ym5:<6eiT$Aq (zTRål*jej#B@TGyZѠӨYLD t#W(U,\@(gr(!LL@'> stream xROHQ6Axw )vuYm[Ңgߺ3ӛ5œ]`鲙}v*b{a[QÓ'a?dy֭S{=5ڊ^-CT#hsM9s1F9 1w7;aYf ]%{w;ћ9 \Ir< X}I<>Uw(gRVzWOelπ~v{|u׶>UEP>,l%KTn)=J+vp,ZSk9xw"zmMWzmʨ)(ͳDf[xf8:罊ZIE?9Z*UVPog~~\?A< =ѯ tIsQIi!3NTc)[d@f endstream endobj 76 0 obj 704 endobj 7 0 obj [ /ICCBased 75 0 R ] endobj 77 0 obj << /Length 78 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xMHaї$T& R+SeL b}wg-E"u.VDNC:DuE^";cT03y|URcE4`λޘvztLUF\)s:k-iYj6|vP4*wd>,y vڴ=S԰79 ڸ@`ӋmvUl5`P=Gj)kP*}6~^/~.~a2 nײ0%f|U 9l7?j`l7"tiNf]?uhgM Zʲ4i[&LY_x {xO$̥߬S]%֧&7g̞>r=g8`候 8rʶ<dWT'<eL~.u"A=9뗚]>313X3-$e}u,gmg664$ыEzL*LZ_j_]Xy[?Xs N/ ]|msϚƫk_WfȸA2)oz-di2|m٣j|5ԥej8ɮeE7[Q|IM%ײxf)|6\ k`Ҳ䍐.> endobj 79 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 80 0 obj << /Length 81 0 R /Length1 11844 /Filter /FlateDecode >> stream xzy|TEpUݵt;Nwt6 I ; L4@ / n@5M@cqFtTgyCM߮޺gsN[# 1(4saC3n7 z/%O#!, )A9 fҏr wŒLH%@ R4\( ,ʝ@j8Jڀ YȉPHi;хa#4hi1:A;Q T4mG|tOG==@A"h zbo9D[0-XƠ [њs( AkqTn@0:MF~xCIWba50VlL p@ehAa/s1tOg.+~Ěbπ&dCZ{gL6d쯱(P"[f< `W x H gh\UP:ټBLiaNc83Fpõp:yqx%~o id2!K23,g.av^&v,v&.ю@*$:kl؋pWI]Od#_ GDOI L6FE+}V24݉f4`2\]S4:']cEb pŷ9x~5 o 0ȈL$d!i#6ʤ1iL\gucX=;ֳ pf;nM+rS6nɽŽǯ7oB0FGX92+,Nsh&.Ǎh+pcn@ ]C@fcV1#H6Hk ;Jvg ) `6-Cvnp RiTϛIvj1.IQ'(r(2*<>AKӪSB9z0}g$v͔^`l1s ~М #moT~~yl8ԗ)_qu|ޯnio0nYoX7BG0 gi?2vCƟ׆G"hZ" ިYmx+8}s뒸"֮vF9T/s"uN.9W{Ǫګ-B<4ٌ$k) \Sb&Q-ؠ!&c2r2%j!-|.f1dbuqzz<:=AIF6/wp<^.O\vv.^dŋEIn5 uƳ n<guӸ׸}kÙ^2 >t)IN`=|tC!?O9O\BVjtM:VZU\$VtbHyYo`AuqIxTݧt@RCjU(p]Nv];v^`F~܂.${i[V$ڂׯK쑡(1z@f2GBH\n7K `CoFVl y._v^u8u6=vtOu *8g.509󬖀{-u/rW{߁ /NX5BA0`3H‹q=&/8SIf! \8e*'0 m\*Y+Eg[ Q9ٕ3oMggqIJ;x7X:&woAd7H{|U{ѷB4EvhRVդڗUCS k3eeۆvh,U&%ٙ1y#Eo%ՌD,sN -2j~(}yu$T8H|ėQfP*41ۓȪ7c gHWc. shm0h QVKZK梿Q:SeEY :PJ^.P'z Bc=cͼ<{zzgccbt[їߊJp&>"d,Fec͟W' ERXs]`p)Mj'F[w?-| 'awnu7.l̙{J+)r;?^WФe o:ޜ1rFW%زb)s1i_YUo-aTeP_>$|ڌ'; xjw {llL BF;'hB%Ҁ>^'ZKCw_SSϤ5ra2`$ϊj$pM()(ĉ$)֮ۋ+&&s6n|G|#Nr'z|7z5 y׭򵽟zkی͆0sK$==f)31DNxEHG#XF_?XrlGpнxeHUoaOyY*rR%KS>[)L)jCG <*$_.U/~hSjso޾ر 3Ww.|vG떾{}!АE@v4;X5B5Uk弢$Hۅ$9\0)ho1;e?DcZL6alRn6Ȑ*A$^h>E }i]W<wLs/s0z'// MJ̬]d-e/Voq2$r:Jׅ!ъC:s=/_zg4gdȹSw) v ^am0kH8\)hTDSlq ?Ⱦ$Q?'d {BL*,|;aU'ujWz)>BvveFz'<7tq&5dtoNjТ:*BpXRtK kxi$*0yoHV} ضG&eLX~ۄѿbӟS::9aG5yQ=`D8= .|`[ 1_O(UF#e5b!^k}w,!9:%OYB0٘!,J?緙 W{ ).}ぶo'PhRjT dʍU=هGŽ{D%4?O\ϟ,IZ9EI[Z1oF^蹗RN[fl_J:JNޞ}-+ oFŝ/V7Mx¸F$Nt߹ǻf!ZNLd1T YpjxFN#@`@㫴T_Y=}0{n}>b߈ 3߂woѯE_7QzuJF-#I]6D^e)UoɉfOOZvɴk@I8 VY|Y16|1J8IQNygtsQ{z \[yXh t/EX>!gn~جM028w;F}Ld  1UjLxiSEQ]B- JCgudnv'@Hv^2tcju*>bNȐUP[~[~]H֎Wt:Ÿ>2r|f}{ {)[nj2VjG\dA|~Ɨ0*QMT2LrEKI\lՀ6V S}.]dK A0<,u/řjM=l֑y!]S.0Ѡp0vn v4>5/pWGOIꟓ2׷\=l*|ۍ4ٵgՙؕFdU藻+n܍dMw@̿u|x뻆}9*R.=Y6Oaq2a0-7s⾺S4fۈ,cWwI2`w4t<O9WM۸}ws_Ő$&ds͒}i}|zѝY3'uR S @G \ 񹨉41sv!n$"!(n-;ÞđKRIK)l#p]l>0 鄰ꐃjMOax HEb59xy,-|i@D"Zik D/U "!/ hE-σzJ tC\QJv'Y73M i(~aX̧(ֺYk9IyVl>8?>n˿~^٬h;^]oM Du>:RQ߄?dcbViksRan;mo3l3vN ֏0ӳivԶTΤ7/+vQEAieԛ_x'Y`I%S A#1qZTgAJOA]PG]&@je*r*H:DZ!}ЇP)k j? NpVXF6F?N'Zn Y VL2W 68KƠ JI:,~)WTQ 'a UN4y Zg̛wy g~gN@l:8g9 T)nS$$87ME5NMGh跹J!CJÖ́ng!1h~-؁^hwb(^,xTH:'N\|\>? gܝd4 9^' S񎃁zڋ!Abݎ\k8r99'_9Jt?O\kLJCνWv;7A/ã [r1[#dƧ΂!ng313ci9sp &4N}s( 9}x'J;G 5q*5+BU[U~o`>嬰FCMp8UЁE"D#R' G@E^ tRˇEV$"uاa#]1*xG=vrcJj<x,4 NQ=уRSDSXYe͜z/τp'^ G޼ r/0L2|[ϑy*fIíp$:0гG3h0;])wh:)?TL90'45ZAl,[\w˻ kqONQzG画Í]u]u]F]&-icbpL+ubxi5p> endobj 83 0 obj [ 722 0 0 0 0 722 0 0 0 0 833 0 0 667 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 556 0 222 0 0 222 0 556 556 556 556 333 500 278 556 500 0 500 500 ] endobj 41 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FTTUWZ+Helvetica /FontDescriptor 82 0 R /Widths 83 0 R /FirstChar 67 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 84 0 obj << /Length 85 0 R /Length1 7924 /Filter /FlateDecode >> stream xY tTչ}^J2d2f&3ɐH!$+IBhAR@hP\P$tЫkb>"JXx-Jaf΄T\]^ֺ.Y6rWoƉ{ ǻ֮q~{V {;}d{'.۫/} IS(};c5j_C;4Ҟ5jޡ4yM]A[)ҙu}5˔&}1}\OSwwk)]wsw_yrt/C"< `i~lCwjc(a fĎ@ӽ- -xNņb v8F1|+alZjwjA#l mo1[HlS.*[]taZK C=E{>!gj\^}W{c" #V<a>Oo3V΂{$l`<Oo%x>"xnvaYvSW½K{%9aP0Zp#|[Q0!g ЈEXp/'4w}B͊Zҷmg!vp&n ;ʽ}ƛ(ga8AG=+KvI9P3'{a+Yr;q!x`(6>8$\oD@ Kq6|B {{Ä)| ^Wq(ؘY{/a/87+O,_o=~a0CX" }.'pQKF"푢IXO< q}lJV] '`1b؃m#k> nJ͍UqpZ,]^Wnss&yZF1r%.+$d 6-[Cgu+0N'R}9)e#^R܅B_p{|kUSSm |!T_0hZj c03 [T8 ?D~>e(Fjh5g8s 8k=R|*{[BWHnMvN~ ~ UhV@R*Pz2BvS&zHGZBG[[V8RBqu s a.Υx/ u`@sA::0>̺x: y,# Jx - +]p.ժp:aW3]+J6kU5/beCYe1R UJ%O6L^ {—O~>37>NasG˃G9 %h8IJ&Ja0j>i4 U ڇSةOgGk/F{ sBHÖ0D dD$C5:I􆣮cZ4DL>PUYyJ#Ņrzn}l)g yilH!'"3|"5KJØAC]E#PU5+))vҲ+f(!{cIFjΥƕ߉F^|$<{N/Ȋi H{p|]Z#DۻŦh/gf*|>3=-CKSpܙJ{Cza.!># gM#U '|dEE*!O\&bhNM\ZV-+/:%۝)RڑR-bvj3N)/+Oaom.sFG[wD]tD[Sw`܄ :}͏EǒMfh6ϙ ${ɥYUwS[\0eI YrGČ/+`C~pZ:y%̞9z+sq̨*U* GlNeLo׬:9UǮ=_o.E enɺu'OxOѡ2gvhI ݻf=?erDv/槓EN&hSwOtZA4 z8y'ޑqi%%-R62ޞni73s^rbqȳ0'_xCM\bbtIt}22ˆ̉Mf{#qD۳Uw HAT#B@/DwYnEɥdpj|0do">%m~۩Z9E"ibbAKD m;/>sܚVo nhBL¸]btPxA]*y0ۡBi NkAD ސ)U]~ZhBp0z]ӱRQ:C}+rb2]djjV&x5zڒ޲ ѳR^ҿo<d.0;2fUsܪdK 5ȓ,j ی%<%=7.z7K6W?;i6G̱uBwac~ÐozWr"V$^^!a1qթ@zlbcc*r,}LU7&ݦ,&f.IH?>}'_B|EJNEGG<P Q=I)к$}]b%J'/wG G1'z,ơǢE83DჁ9Z7@*.yuuutt/h(NL 3aTP/uHLEZ`I*KnчbjA7Y׉sh4dV&V#JZp1)UJ#0@GR6Pc6=g{mņU Vr _ID҇@@[_hW̼մ 80|&z,1MAO<-ጏƢ۟.,dLlZeo|󌞌߅!S0)?L֊.ZՑ ER̉/tKFᷰhyQ|@ʶL~ \lf, ga'e/jyRh#7*Bd7ҹ=Hu)w#>1lM5KW^+XP}ӪeߨWL9ygg&߃џF:o%t9/ ufRB!7oP#?@jEYl=CxW}P6$kKk˖YZr?9!Č`CY[qDʗ:.5(;??.9YŒ 9;\7<+̝:V e(, B9_--I<)Gʖ\D)]J$kDAhhD ФcY*'!ո|U$wea0"ܑZ> endobj 87 0 obj [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 722 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 611 0 0 556 0 0 0 278 0 556 0 0 611 611 0 0 389 0 333 0 0 778 0 556 ] endobj 42 0 obj << /Type /Font /Subtype /TrueType /BaseFont /LQPRFW+Helvetica-Bold /FontDescriptor 86 0 R /Widths 87 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 1 0 obj << /Producer (Mac OS X 10.5.3 Quartz PDFContext) /CreationDate (D:20080616183824Z00'00') /ModDate (D:20080616183824Z00'00') >> endobj xref 0 88 0000000000 65535 f 0000046659 00000 n 0000004338 00000 n 0000031821 00000 n 0000000022 00000 n 0000004318 00000 n 0000004442 00000 n 0000030833 00000 n 0000006833 00000 n 0000007133 00000 n 0000008156 00000 n 0000008465 00000 n 0000008485 00000 n 0000008808 00000 n 0000004803 00000 n 0000005112 00000 n 0000007481 00000 n 0000007807 00000 n 0000009836 00000 n 0000010132 00000 n 0000005132 00000 n 0000005441 00000 n 0000007152 00000 n 0000007461 00000 n 0000007827 00000 n 0000008136 00000 n 0000005461 00000 n 0000005784 00000 n 0000008828 00000 n 0000009151 00000 n 0000006490 00000 n 0000006813 00000 n 0000009171 00000 n 0000009494 00000 n 0000005804 00000 n 0000006127 00000 n 0000009514 00000 n 0000009816 00000 n 0000006147 00000 n 0000006470 00000 n 0000031784 00000 n 0000040653 00000 n 0000046479 00000 n 0000022800 00000 n 0000023762 00000 n 0000026074 00000 n 0000027351 00000 n 0000024801 00000 n 0000026053 00000 n 0000014972 00000 n 0000016301 00000 n 0000011096 00000 n 0000012350 00000 n 0000016322 00000 n 0000017588 00000 n 0000021518 00000 n 0000022779 00000 n 0000010152 00000 n 0000011076 00000 n 0000023782 00000 n 0000024781 00000 n 0000027372 00000 n 0000028647 00000 n 0000012371 00000 n 0000013669 00000 n 0000020270 00000 n 0000021497 00000 n 0000028668 00000 n 0000029984 00000 n 0000018898 00000 n 0000020249 00000 n 0000013690 00000 n 0000014951 00000 n 0000017609 00000 n 0000018877 00000 n 0000030005 00000 n 0000030813 00000 n 0000030869 00000 n 0000031764 00000 n 0000031904 00000 n 0000031968 00000 n 0000040212 00000 n 0000040233 00000 n 0000040469 00000 n 0000040828 00000 n 0000045984 00000 n 0000046005 00000 n 0000046249 00000 n trailer << /Size 88 /Root 79 0 R /Info 1 0 R /ID [ <06bb8a184bebf551c289cefd1476dc39> <06bb8a184bebf551c289cefd1476dc39> ] >> startxref 46801 %%EOF 1 0 obj <> endobj xref 1 1 0000048719 00000 n trailer < <06bb8a184bebf551c289cefd1476dc39>] /Info 1 0 R /Prev 46801 /Root 79 0 R /Size 88>> startxref 48935 %%EOF pion-5.0.6+dfsg.orig/doc/README.ubuntu0000644000372000001440000000556112314121350016704 0ustar robertousersUbuntu Linux Build Instructions =============================== Note that these instructions are based on Ubuntu 9.04 (Jaunty), and may differ for other versions of Ubuntu. Installing dependencies: ------------------------ You can install the development tools required by Pion using apt-get: # apt-get install autoconf libtool make gcc g++ ruby cmake doxygen pkg-config You can install most of the third-party libraries required by Pion using apt-get: # apt-get install zlib1g-dev libssl-dev libxml2-dev libbz2-dev libpcap-dev python-lxml To install the Boost development libraries, use this on Ubuntu 9.04: # apt-get install libboost1.37-dev Use this instead on Ubuntu 9.10: # apt-get install libboost1.40-all-dev Installing log4cplus: --------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. We recommend that you use log4cplus for logging. Please visit the "Third Party Libraries" page on our website to obtain the source code tarball for log4cplus. Then, just run: # tar xvfj log4cplus-.tar.bz2 # cd log4cplus- # ./configure --enable-threads=yes # make all # make install Installing Python: ------------------ Pion's PythonReactor requires Python version 2.4 or greater. You may skip this step if you do not want to build support for Python. Python 2.4 (or greater) is already pre-installed and should work out of the box on most Linux systems. If you do not have it already, you should be able to grab the latest version using your favorite package manager: # apt-get install python python-dev Installing YAJL: ---------------- YAJL ("Yet Another JSON Library") is required to build support for the JSONCodec plugin. You may skip this step if you do not want to build support for JSON. On Ubuntu 10.04 and later, you can install this easily with: # sudo apt-get install libyajl-dev You can download the source code tarball for YAJL from the "Third Party Libraries" page on our website. After downloading it, just run: # tar xvfz yajl-.tgz # cd yajl- # ./configure # make One of the unit tests seems to fail on Ubuntu, but you can just ignore it. To install YAJL, we recommend that you just move the build files in the "build/yajl-" subdirectory into /usr/local: # sudo mv build/yajl-/lib/* /usr/local/lib # sudo mv build/yajl-/include/yajl /usr/local/include Building and installing Pion: ----------------------------- Now you should be able to build and install Pion: # tar xvfz pion--.tar.gz # cd pion-- # ./configure # make all # make install To build and run Pion's unit tests, run "make check" Known Problems -------------- The Pion executables may complain about loading shared libraries if the Boost and/or other libraries are not in your search path. Try this: export LD_LIBRARY_PATH=/usr/local/lib pion-5.0.6+dfsg.orig/doc/pion-net.graffle0000644000372000001440000015573112314121350017571 0ustar robertousers ActiveLayerIndex 0 ApplicationVersion com.omnigroup.OmniGrafflePro 129.15 AutoAdjust CanvasColor w 1 CanvasOrigin {0, 0} CanvasScale 1 ColumnAlign 1 ColumnSpacing 36 CreationDate 2007-04-15 18:28:00 -0700 Creator Michael Dickey DisplayScale 1 in = 1 in GraphDocumentVersion 5 GraphicsList Bounds {{248.518, 290.329}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 175 Line ID 174 Position 0.31719011068344116 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 173 ID 174 Points {275.018, 307.329} {275.018, 275.802} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 133 Bounds {{205.018, 240.302}, {140, 35}} Class ShapedGraphic ID 173 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPParser} Bounds {{53, 330.051}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 172 Line ID 171 Position 0.47587314248085022 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 87 ID 171 Points {79.5, 434.36} {79.5, 229.874} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 166 Bounds {{26, 435.36}, {107, 35}} Class ShapedGraphic ID 166 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPServer} Bounds {{329.666, 450.201}, {36, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 162 Line ID 161 Position 0.2698262631893158 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 uses} Class LineGraphic Head ID 135 Info 8 ID 161 Points {314.984, 466.519} {436.105, 431.985} Style stroke HeadArrow FilledArrow Pattern 1 TailArrow 0 Tail ID 25 Bounds {{271.744, 438.958}, {36, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 160 Line ID 159 Position 0.25524911284446716 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 uses} Class LineGraphic Head ID 27 ID 159 Points {275.096, 459.202} {332.482, 407.315} Style stroke HeadArrow FilledArrow Pattern 1 TailArrow 0 Tail ID 25 Bounds {{669.433, 346.528}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 158 Line ID 157 Position 0.3034064769744873 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 72 ID 157 Points {669.895, 413.874} {702, 318.421} {639.482, 230.808} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Tail ID 136 Bounds {{129.407, 291.115}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 156 Line ID 155 Position 0.17846563458442688 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 110 ID 155 Points {193.177, 371.496} {159.169, 240} {427.004, 217.528} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Tail ID 132 Bounds {{205.737, 353.884}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 151 Line ID 150 Position 0.37797626852989197 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 133 ID 150 Points {219.27, 371.66} {253.577, 343.149} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 132 Bounds {{599.736, 388.194}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 147 Line ID 146 Position 0.45945680141448975 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 134 ID 146 Points {645.533, 413.999} {603.533, 373.07} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 136 Bounds {{290.7, 353.386}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 144 Line ID 143 Position 0.39542737603187561 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 133 ID 143 Points {330.766, 371.66} {296.459, 343.149} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 27 Bounds {{505.754, 388.047}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 142 Line ID 141 Position 0.46703839302062988 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 134 ID 141 Points {506.586, 414.348} {561.545, 373.022} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 135 Bounds {{446.884, 370.71}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 140 Line ID 137 Position 0.19981692731380463 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 110 ID 137 Points {471.586, 414.348} {485.588, 230.991} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 135 Info 3 Bounds {{593.849, 414.348}, {140, 35}} Class ShapedGraphic ID 136 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequestWriter} Bounds {{436.586, 414.348}, {140, 35}} Class ShapedGraphic ID 135 Magnets {1, 1} {1, -1} {-0.25, -0.499999} {-1, 1} {0, 1} {0, -1} {1, 0} {-1, 0} Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponseWriter} Bounds {{515.217, 337.721}, {140, 35}} Class ShapedGraphic ID 134 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPWriter} Bounds {{205.018, 307.829}, {140, 35}} Class ShapedGraphic ID 133 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPReader} Bounds {{127.828, 371.98}, {140, 35}} Class ShapedGraphic ID 132 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponseReader} Bounds {{599.914, 93.2868}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 131 Line ID 130 Position 0.40399140119552612 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 109 ID 130 Points {626.414, 117.242} {626.414, 75.2727} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 127 Bounds {{567.414, 117.742}, {118, 35}} Class ShapedGraphic ID 127 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPMessage} Bounds {{525.231, 169.625}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 116 Line ID 111 Position 0.43068146705627441 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Bounds {{599.914, 170.134}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 115 Line ID 112 Position 0.41371780633926392 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 127 ID 112 Points {626.414, 193.994} {626.414, 153.242} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 72 Class LineGraphic Head ID 127 ID 111 Points {519.456, 194.509} {594.395, 152.984} Style stroke HeadArrow FilledArrow TailArrow 0 Width 2 Tail ID 110 Bounds {{428, 194.994}, {118, 35}} Class ShapedGraphic ID 110 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPResponse} Bounds {{567.414, 39.7727}, {118, 35}} Class ShapedGraphic ID 109 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPTypes} Bounds {{53, 492.34}, {53, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 103 Line ID 102 Position 0.46208575367927551 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 extends} Class LineGraphic Head ID 166 ID 102 Points {79.5, 523.376} {79.5, 471.36} Style stroke HeadArrow FilledArrow LineType 1 TailArrow 0 Width 2 Tail ID 1 Bounds {{29.5, 193.874}, {100, 35}} Class ShapedGraphic ID 87 Shape Rectangle Style fill Color b 0.534124 g 0.984429 r 1 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 TCPServer} Bounds {{136.936, 503.659}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 84 Line ID 83 Position 0.46410125494003296 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 25 ID 83 Points {128.053, 524.031} {206.447, 495.218} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 1 Bounds {{104.169, 162.986}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 75 Line ID 74 Position 0.40371024608612061 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 71 ID 74 Points {102.342, 193.252} {174.986, 135.622} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 87 Bounds {{308.5, 39.7727}, {151, 17}} Class ShapedGraphic FitText YES Flow Resize FontInfo Font Helvetica Size 14 ID 73 Shape Rectangle Style fill Draws NO shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\b\fs28 \cf0 Pion Network Library} Wrap NO Bounds {{388.388, 341.377}, {55, 14}} Class ShapedGraphic FitText YES FontInfo Color w 0 Font Helvetica Size 12 ID 46 Line ID 40 Position 0.16527046263217926 RotationType 0 Shape Rectangle Style shadow Draws NO stroke Draws NO Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 includes} Class LineGraphic Head ID 72 ID 40 Points {379.74, 371.709} {598.461, 230.536} Style stroke HeadArrow FilledArrow TailArrow 0 Tail ID 27 Bounds {{127.828, 100}, {140, 35}} Class ShapedGraphic ID 71 Shape Rectangle Style fill Color b 0.534124 g 0.984429 r 1 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 TCPConnection} Bounds {{567.414, 194.994}, {118, 35}} Class ShapedGraphic ID 72 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequest} Bounds {{282.207, 371.98}, {140, 35}} Class ShapedGraphic ID 27 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Pattern 1 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 HTTPRequestReader} Bounds {{196, 459.873}, {118, 35}} Class ShapedGraphic ID 25 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 WebService} Bounds {{26, 524.376}, {107, 35}} Class ShapedGraphic ID 1 Shape Rectangle Style fill Color b 0.510824 g 1 r 0.672452 stroke Width 2 Text Text {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural \f0\fs24 \cf0 WebServer} GridInfo GuidesLocked NO GuidesVisible YES HPages 1 ImageCounter 1 IsPalette NO KeepToScale Layers Lock NO Name Layer 1 Print YES View YES LayoutInfo LinksVisible NO MagnetsVisible NO MasterSheet Master 1 MasterSheets ActiveLayerIndex 0 AutoAdjust CanvasColor w 1 CanvasOrigin {0, 0} CanvasScale 1 ColumnAlign 1 ColumnSpacing 36 DisplayScale 1 in = 1 in GraphicsList GridInfo HPages 1 IsPalette NO KeepToScale Layers Lock NO Name Layer 1 Print YES View YES LayoutInfo Orientation 2 OutlineStyle Basic RowAlign 1 RowSpacing 36 SheetTitle Master 1 UniqueID 1 VPages 1 ModificationDate 2008-06-16 11:34:53 -0700 Modifier Michael Dickey NotesVisible NO Orientation 2 OriginVisible NO OutlineStyle Basic PageBreaks YES PrintInfo NSBottomMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSLeftMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSOrientation int 1 NSPaperSize size {792, 612} NSRightMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG NSTopMargin coded BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklwCG ReadOnly NO RowAlign 1 RowSpacing 36 SheetTitle Canvas 1 SmartAlignmentGuidesActive YES SmartDistanceGuidesActive YES UniqueID 1 UseEntirePage VPages 1 WindowInfo CurrentSheet 0 DrawerTab Outline DrawerWidth 209 Frame {{391, 155}, {1015, 783}} VisibleRegion {{-116, -40}, {1000, 669}} Zoom 1 pion-5.0.6+dfsg.orig/doc/README0000644000372000001440000000034612314121350015357 0ustar robertousersThis directory is for reserved for documentation specific to the Pion Network Library. For general Pion documentation, please see the documentation directory for the Pion Common Library, located in: /common/doc/. pion-5.0.6+dfsg.orig/doc/README.msvc0000644000372000001440000002404312314121350016326 0ustar robertousersMicrosoft Visual C++ Build Instructions ======================================= The Easy Way: ------------- Atomic Labs has a zip file available from the "Third Party Libraries" page on our website that contains all of the required libraries to build Pion for MSVC 2008. To get started quickly, just download and uncompress this file into your C:\ directory, and you should be able to skip most of the following instructions (however, Path updates are still required). Building Boost: --------------- First, download and unzip the Boost 1.42.0 source code from: http://sourceforge.net/projects/boost/files/boost/1.42.0 We recommend that you use the bjam tool to build Boost for MSVC. You can download the latest bjam executable from: http://sourceforge.net/projects/boost/files/boost-jam (Click on boost-jam-3.1.18-1-ntx86.zip, or similar) Copy the included "bjam" executable into your C:\Windows\System32 directory. Open the Visual Studio 2008 Command Prompt, change to the Boost source code directory, and type: bjam --toolset=msvc debug release threading=multi stage Or, if you wish to build only the libraries required by Pion (this saves a little time and disk space but not a whole lot): bjam --toolset=msvc --with-thread --with-system --with-filesystem \ --with-regex --with-date_time --with-unit_test_framework \ --with-signals debug release threading=multi stage Boost.Iostreams is also required, but must be compiled separately for Windows; see Building Boost.Iostreams below. We recommend that you create a C:\boost-1.42.0 directory with C:\boost-1.42.0\lib and C:\boost-1.42.0\boost subdirectories. To install boost-1.42.0 into these directories, just copy the files in stage\lib into C:\boost-1.42.0\lib, and copy the entire boost directory (which contains all the header files) into C:\boost-1.42.0\boost. Finally, add C:\boost-1.42.0\lib to your Path. Building Boost.Iostreams: ------------------------- Boost.Iostreams is built by default without compression/decompression support on Windows (since zlib and bzip2 aren't installed as part of Windows.) Since Pion uses boost::iostreams::gzip_decompressor and boost::iostreams::bzip2_decompressor, zlib and bzip2 must be installed (see instructions later in this document) and Boost.Iostreams must be rebuilt: open a command prompt in ...\boost_1_42_0\libs\iostreams\build, and run the following command (changing the paths if you installed zlib and/or bzip2 elsewhere.) bjam debug release -sZLIB_BINARY=zdll -sZLIB_INCLUDE=C:/zlib-1.2.3/include \ -sZLIB_LIBPATH=C:/zlib-1.2.3/lib -sBZIP2_BINARY=bzip2 \ -sBZIP2_INCLUDE=C:/bzip2-1.0.5/include -sBZIP2_LIBPATH=C:/bzip2-1.0.5/lib Then copy boost_iostreams-vc90-mt-gd-1_42.{dll|lib} and boost_iostreams-vc90-mt-1_42.{dll|lib} from ...\boost_1_42_0\bin.v2\libs\iostreams\build to C:\Boost\Lib. Building Boost.Regex: ------------------------- Boost.Regex is built by default without Unicode support via ICU. Since Pion uses boost::u32regex, ICU must be installed (see instructions later in this document) and Boost.Regex must be rebuilt: open a command prompt in ...\boost_1_42_0\libs\regex\build, and run the following command (changing the path if you installed ICU elsewhere.) bjam debug release -sICU_PATH=C:\icu-3.6 Then copy boost_regex-vc90-mt-gd-1_42.{dll|lib} and boost_regex-vc90-mt-1_42.{dll|lib} from ...\boost_1_42_0\bin.v2\libs\regex\build to C:\boost-1.42.0\lib. Documentation is available at the Boost website: http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/install.html#boost_regex.install.building_with_unicode_and_icu_support Installing OpenSSL: ------------------- ASIO requires OpenSSL for SSL/TLS encryption support. You can get Win 32 binaries for OpenSSL from: http://www.pion.org/files/openssl-0.9.8l-win32.zip Unzip directly into C: (or change OPENSSL_HOME accordingly.) The zip file includes both static (in /lib) and DLL (in /bin) versions of ssleay32 and libeay32. If you want to use the DLL versions, you will need to add C:\openssl-0.9.8l\bin to your path (or otherwise include the DLLs). If you want to build them yourself, you can get the source tarball from: http://www.openssl.org/source/openssl-0.9.8l.tar.gz You can build the static or DLL versions of ssleay32 and libeay32 by using nt.mak or ntdll.mak, respectively, as explained in INSTALL.W32. Pion expects them to be in $(OPENSSL_HOME)\lib or $(OPENSSL_HOME)\bin, repectively, where OPENSSL_HOME is C:\openssl-0.9.8l unless you've changed it. Pion is currently set up to link to ssleay32d.lib and libeay32d.lib for the debug configuration; the easiest way to get these files is from the above zip file. Note that if you try to use the release versions of ssleay32.lib and libeay32.lib with a debug configuration of Pion, you will probably have trouble running the unit tests, due to msvcr80.dll and msvcr80d.dll being loaded at the same time. (Yes, this is even true for the static versions.) Linking with OpenSSL: --------------------- Macro OPENSSL_HOME in pion.vsprops is set to C:\openssl-0.9.8l. If you installed OpenSSL somewhere other than C:\openssl-0.9.8l, change OPENSSL_HOME accordingly. By default, Pion links with the DLL versions, which should be in $(OPENSSL_HOME)\bin. To link with the static versions, you will have to change $(OPENSSL_HOME)\bin to $(OPENSSL_HOME)\lib in common\build\Release_DLL_pion.vsprops, common\build\Debug_DLL_pion.vsprops and platform\server\pion.vcproj. Include PION_HAVE_SSL or PION_FULL in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_HAVE_SSL'. (The Debug_DLL_full and Release_DLL_full configurations have PION_FULL defined.) Logging frameworks: ------------------- Note that the use of a logging framework is entirely optional, so you may skip this step if you like. If no logging option is defined, std::cout and std::cerr will be used for logging. To disable logging, include PION_DISABLE_LOGGING in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_DISABLE_LOGGING'. We recommend log4cplus (http://log4cplus.sourceforge.net/) for logging. A binary distribution is available at http://pion.org/files/log4cplus-1.0.3-win32.zip. Extract it into C:\, or change user macro LOG4CPLUS_HOME in pion.vsprops, currently set to C:\log4cplus-1.0.3, accordingly. Add \bin to your path. Include PION_USE_LOG4CPLUS or PION_FULL in Preprocessor Definitions for the project, or in PionConfig.hpp.win, uncomment '#define PION_USE_LOG4CPLUS'. JSON (optional): ---------------- Building JSONCodec requires YAJL (http://lloyd.github.com/yajl/). A binary distribution is available at http://pion.org/files/yajl-1.0.9.win32.zip. Unzip directly into C: (or change JSONCodec.vcproj accordingly) and add C:\yajl-1.0.9\bin to your path. JSONCodec is only built in the Debug_DLL_full and Release_DLL_full configurations of pion-platform.sln. Python (optional): ------------------ Building PythonReactor requires python 2.6 to be installed. A Windows installer is available at http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi. Install it in the default location (or change PythonReactor.vcproj accordingly). Unfortunately, the installer doesn't include the debug version of the library, so you will need to build python26_d yourself in order to build the debug version of PythonReactor. The source code is available at http://www.python.org/ftp/python/2.6.2/Python-2.6.2.tar.bz2: open pcbuild.sln, build the debug version of python.vcproj, then copy python26_d.lib to C:\Python26\libs and python26_d.dll to C:\Windows\SysWOW64 (or wherever the installer put python26.lib and python26.dll, respectively). PythonReactor is only built in the Debug_DLL_full and Release_DLL_full configurations of pion-platform.sln. Additional libraries (required for PLATFORM build) -------------------------------------------------- zlib: - download http://xmlsoft.org/sources/win32/zlib-1.2.3.win32.zip - open it into C:\zlib-1.2.3 - add C:\zlib-1.2.3\bin to your path - (if installed somewhere other than C:\zlib-1.2.3, change user macro ZLIB_HOME in pion.vsprops accordingly) iconv: - download http://xmlsoft.org/sources/win32/iconv-1.9.2.win32.zip - open it into C:\iconv-1.9.2\ - add C:\iconv-1.9.2\bin to your path libxml: - download http://xmlsoft.org/sources/win32/libxml2-2.6.30.win32.zip - open it into C:\libxml2-2.6.30\ - add C:\libxml2-2.6.30\bin to your path - (if installed somewhere other than C:\libxml2-2.6.30, change user macro LIBXML_HOME in pion.vsprops accordingly) bzip2: - download http://gnuwin32.sourceforge.net/downlinks/bzip2-bin-zip.php - open it into C:\bzip2-1.0.5 - add C:\bzip2-1.0.5\bin to your path - (if installed somewhere other than C:\bzip2-1.0.5, change user macro BZIP2_HOME in pion.vsprops accordingly) icu: - download ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-Win32-msvc7_1.zip - open it into C:\icu-3.6 - add C:\icu-3.6\bin to your path - (if installed somewhere other than C:\icu-3.6, change user macro ICU_HOME in pion.vsprops accordingly) Building and installing Pion: ----------------------------- Now you should be able to build the solution file called pion-.sln. See platform/server/README.msvc for more information about running Pion. Running the test programs: -------------------------- Make sure "C:\boost-1.42.0\lib" is on your path. If you got the source code from the Subversion repository and haven't yet run Doxygen, then create the documentation files (used as part of the Pion Network Library tests) as follows: cd \.. doxygen net\doc\Doxyfile Alternatively, just create file "\doc\html\index.html": pion-net Documentation

pion-net Documentation

Otherwise, PionWebServer and unit tests fail with "no such directory" error. To test PionWebServer, try running it from "\utils\" with the following command line args: -c testservices.conf To run from within the IDE, go to PionWebServer Property Pages -> Debugging, and set 'Command Arguments' to the above. pion-5.0.6+dfsg.orig/build/0000755000372000001440000000000012546623752015052 5ustar robertouserspion-5.0.6+dfsg.orig/build/third_party_libs_x64.props0000644000372000001440000001004712314121350022160 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib\x64 C:\bzip2-1.0.6\lib64 C:\iconv-1.9.2\include C:\iconv-1.9.2\bin\x64 C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib64 C:\libxml2-2.9.0\include C:\libxml2-2.9.0\bin\x64 C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin\x64 C:\openssl-1.0.1c\inc64 C:\openssl-1.0.1c\bin\x64 C:\Python26\x64\include C:\Python26\x64\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\lib\Release\x64 C:\zlib-1.2.7\include C:\zlib-1.2.7\bin\x64 $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(PATH) C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib64\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);%(AdditionalIncludeDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(PION_PATH) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.6+dfsg.orig/build/pion-setup.inc0000644000372000001440000001264512314121350017634 0ustar robertousers# -------------------------------------- # pion-setup autoconf configuration file # -------------------------------------- # DO NOT USE autoheader (the .hpp.in file is not automanaged) AUTOHEADER="echo autoheader ignored" # Check for programs AC_PROG_CXX AC_PROG_INSTALL # Use C++ language AC_LANG_CPLUSPLUS AX_COMPILER_VENDOR # library to link with for dlopen, etc. PION_DLOPEN_LIBS=$lt_cv_dlopen_libs AC_SUBST(PION_DLOPEN_LIBS) # Set basic compiler options case "$build_os" in *solaris*) if test "$ax_cv_cxx_compiler_vendor" = "sun"; then # Solaris: Sun Studio C++ compiler CPPFLAGS="$CPPFLAGS -mt -library=stlport4" LDFLAGS="$LDFLAGS -mt -library=stlport4" PION_OPT_FLAGS="-O2 -DNDEBUG" PION_DEBUG_FLAGS="-g" else # Solaris: GCC compiler CPPFLAGS="$CPPFLAGS -pthreads -D_REENTRANT" LDFLAGS="$LDFLAGS -pthreads" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" fi PION_EXTERNAL_LIBS="-lsocket -lnsl -lposix4" ;; *darwin*) # Mac OS X: GCC compiler # -pthread is implied (automatically set by compiler) CPPFLAGS="$CPPFLAGS -D_REENTRANT" #LDFLAGS="$LDFLAGS" #PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -fno-tree-pre -falign-loops -Wall -Wno-strict-aliasing -DNDEBUG" PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" # Check for OSX binary architecture AC_MSG_CHECKING([for OSX binary architectures]) AC_ARG_WITH([arch], AC_HELP_STRING([--with-arch@<:@=LIST@:>@],[specify comma-separated list of OSX architectures]), [with_arch=$withval], [with_arch=default]) if test "$with_arch" = "no"; then AC_MSG_RESULT(no) elif test "$with_arch" = "default"; then AC_MSG_RESULT(no) # Note: Pion seems to crashe consistently when built with x86_64 # AC_MSG_RESULT(x86_64) # with_arch="-arch x86_64" # PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" # PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" else AC_MSG_RESULT($with_arch) with_arch="-arch `echo $with_arch | sed 's#,# -arch #g'`" PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" fi ;; *cygwin*) # Cygwin GCC compiler (Windows) CPPFLAGS="$CPPFLAGS -mthreads -D_REENTRANT -DPION_WIN32 -D__USE_W32_SOCKETS" LDFLAGS="$LDFLAGS -mthreads -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" PION_EXTERNAL_LIBS="-lws2_32 -lmswsock" ;; *freebsd*) # FreeBSD: GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; *) # Other (Linux): GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" LIBS="-lrt -ldl" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; esac # Check for --with-cpu (gcc CPU architecture) AC_MSG_CHECKING([for specific CPU architecture]) AC_ARG_WITH([cpu], AC_HELP_STRING([--with-cpu@<:@=MARCH@:>@],[specify specific CPU architecture for gcc]), [with_cpu=$withval], [with_cpu=default]) if test "$with_cpu" = "no"; then AC_MSG_RESULT(no) else if test "$with_cpu" = "default"; then if test "$with_arch" = "no" || test "$with_arch" = "default" ; then if test "$ax_cv_cxx_compiler_vendor" = "gnu"; then # check __x86_64__ to determine default AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #if defined(__x86_64__) // x86_64 defined -> leave undefined #else #error __x86_64__ not defined -> i686 #endif ]])], [], [with_cpu="i686"]) fi fi fi if test "$with_cpu" = "default"; then AC_MSG_RESULT(no) else # check to make sure it works CFLAGS_SAVED=$CFLAGS CXXFLAGS_SAVED=$CXXFLAGS CFLAGS="$CFLAGS -march=$with_cpu" CXXFLAGS="$CXXFLAGS -march=$with_cpu" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [ AC_MSG_RESULT($with_cpu) PION_OPT_FLAGS="$PION_OPT_FLAGS -march=$with_cpu" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS -march=$with_cpu" ], [ AC_MSG_RESULT(no) ]) CFLAGS=$CFLAGS_SAVED CXXFLAGS=$CXXFLAGS_SAVED fi fi # Check for debug AC_MSG_CHECKING([for debugging]) AC_ARG_WITH([debug], AC_HELP_STRING([--with-debug],[build with debugging information]), [with_debug=$withval], [with_debug=no]) if test "$with_debug" = "no"; then AC_MSG_RESULT(no) CFLAGS="$CFLAGS $PION_OPT_FLAGS" CXXFLAGS="$CXXFLAGS $PION_OPT_FLAGS" else AC_MSG_RESULT(yes) CFLAGS="$CFLAGS $PION_DEBUG_FLAGS" CXXFLAGS="$CXXFLAGS $PION_DEBUG_FLAGS" fi # Check for --with-plugins AC_MSG_CHECKING([for plug-ins directory]) AC_ARG_WITH([plugins], AC_HELP_STRING([--with-plugins@<:@=DIR@:>@],[directory where Pion Plug-ins are installed]), [with_plugins=$withval], [with_plugins=no]) if test "$with_plugins" = "no"; then if test "x$prefix" = "xNONE"; then PION_PLUGINS_DIRECTORY=/usr/local/share/pion/plugins else PION_PLUGINS_DIRECTORY=${prefix}/share/pion/plugins fi else PION_PLUGINS_DIRECTORY=$with_plugins fi AC_MSG_RESULT($PION_PLUGINS_DIRECTORY) AC_DEFINE_UNQUOTED([PION_PLUGINS_DIRECTORY],["$PION_PLUGINS_DIRECTORY"],[Define to the directory where Pion Plug-ins are installed.]) AC_SUBST(PION_PLUGINS_DIRECTORY) pion-5.0.6+dfsg.orig/build/third_party_libs_win32.props0000644000372000001440000001212312314121350022476 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib C:\iconv-1.9.2\bin C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib C:\icu4c-49_1_2\icu\bin C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib C:\libxml2-2.9.0\bin C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc32 C:\openssl-1.0.1c\bin C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\lib\Release C:\zlib-1.2.7\include C:\zlib-1.2.7\lib C:\zlib-1.2.7\bin $(BOOST_LIB);$(BZIP2_BIN);$(ICONV_BIN);$(ICU_BIN);$(LIBXML_BIN);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_BIN);$(PATH) C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);$(SQLITE_INC);%(AdditionalIncludeDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(SQLITE_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICONV_BIN) $(ICU_INC) $(ICU_LIB) $(ICU_BIN) $(LIBXML_INC) $(LIBXML_LIB) $(LIBXML_BIN) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(ZLIB_BIN) $(PION_PATH) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.6+dfsg.orig/build/make_config.pl0000644000372000001440000000372312314121350017632 0ustar robertousers#!/usr/bin/perl # -------------------------------------------------- # pion-platform configuration directory build script # -------------------------------------------------- use File::Spec; use File::Path; use File::Copy; use File::Glob ':glob'; # include perl source with common subroutines require File::Spec->catfile( ("common", "build"), "common.pl"); # ----------------------------------- # process argv & set global variables # ----------------------------------- # check command line parameters die("usage: make_config.pl [=]+") if ($#ARGV < 1); # set some global variables $SRCDIR = $ARGV[0]; $DESTDIR = $ARGV[1]; # ------------ # main process # ------------ # check source directory die "Source directory does not exist: $SRCDIR" if (! -d $SRCDIR); # build template parameter hash (start with default values) my %templates = ("PION_PLUGINS_DIRECTORY" => "../../platform/codecs/.libs/../../platform/databases/.libs/../../platform/reactors/.libs../../platform/protocols/.libs/../../platform/services/.libs/../../net/services/.libs/", "PION_DATA_DIRECTORY" => ".", "PION_UI_DIRECTORY" => "../../platform/ui", "PION_LOG_CONFIG" => "logconfig.txt", "PION_CONFIG_CHANGE_LOG" => "config.log"); # update template parameter hash using values provided my $do_merge = 0; for ($n = 2; $n <= $#ARGV; ++$n) { die "Bad template argument: \"$ARGV[$n]\"" if (! ($ARGV[$n] =~ m/([^=]+)=(.*)/) ); if ($1 eq "MERGE") { $do_merge = 1 } else { $templates{$1} = $2; } } # clear out old files and directories at destination if (not $do_merge) { @oldfiles = bsd_glob($DESTDIR . "/*"); foreach (@oldfiles) { rmtree($_); } } # copy files using templates copyDirWithoutDotFiles($SRCDIR, $DESTDIR, %templates); print "* Done building configuration directory ($SRCDIR => $DESTDIR)\n"; pion-5.0.6+dfsg.orig/build/ax_prog_doxygen.m40000644000372000001440000004277412314121350020502 0ustar robertousers# =========================================================================== # http://autoconf-archive.cryp.to/ax_prog_doxygen.html # =========================================================================== # # SYNOPSIS # # DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR]) # DX_DOXYGEN_FEATURE(ON|OFF) # DX_DOT_FEATURE(ON|OFF) # DX_HTML_FEATURE(ON|OFF) # DX_CHM_FEATURE(ON|OFF) # DX_CHI_FEATURE(ON|OFF) # DX_MAN_FEATURE(ON|OFF) # DX_RTF_FEATURE(ON|OFF) # DX_XML_FEATURE(ON|OFF) # DX_PDF_FEATURE(ON|OFF) # DX_PS_FEATURE(ON|OFF) # # DESCRIPTION # # The DX_*_FEATURE macros control the default setting for the given # Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for # generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML # help (for MS users), 'CHI' for generating a seperate .chi file by the # .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate # output formats. The environment variable DOXYGEN_PAPER_SIZE may be # specified to override the default 'a4wide' paper size. # # By default, HTML, PDF and PS documentation is generated as this seems to # be the most popular and portable combination. MAN pages created by # Doxygen are usually problematic, though by picking an appropriate subset # and doing some massaging they might be better than nothing. CHM and RTF # are specific for MS (note that you can't generate both HTML and CHM at # the same time). The XML is rather useless unless you apply specialized # post-processing to it. # # The macros mainly control the default state of the feature. The use can # override the default by specifying --enable or --disable. The macros # ensure that contradictory flags are not given (e.g., # --enable-doxygen-html and --enable-doxygen-chm, # --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each # feature will be automatically disabled (with a warning) if the required # programs are missing. # # Once all the feature defaults have been specified, call DX_INIT_DOXYGEN # with the following parameters: a one-word name for the project for use # as a filename base etc., an optional configuration file name (the # default is 'Doxyfile', the same as Doxygen's default), and an optional # output directory name (the default is 'doxygen-doc'). # # Automake Support # # The following is a template aminclude.am file for use with Automake. # Make targets and variables values are controlled by the various # DX_COND_* conditionals set by autoconf. # # The provided targets are: # # doxygen-doc: Generate all doxygen documentation. # # doxygen-run: Run doxygen, which will generate some of the # documentation (HTML, CHM, CHI, MAN, RTF, XML) # but will not do the post processing required # for the rest of it (PS, PDF, and some MAN). # # doxygen-man: Rename some doxygen generated man pages. # # doxygen-ps: Generate doxygen PostScript documentation. # # doxygen-pdf: Generate doxygen PDF documentation. # # Note that by default these are not integrated into the automake targets. # If doxygen is used to generate man pages, you can achieve this # integration by setting man3_MANS to the list of man pages generated and # then adding the dependency: # # $(man3_MANS): doxygen-doc # # This will cause make to run doxygen and generate all the documentation. # # The following variable is intended for use in Makefile.am: # # DX_CLEANFILES = everything to clean. # # Then add this variable to MOSTLYCLEANFILES. # # ----- begin aminclude.am ------------------------------------- # # ## --------------------------------- ## # ## Format-independent Doxygen rules. ## # ## --------------------------------- ## # # if DX_COND_doc # # ## ------------------------------- ## # ## Rules specific for HTML output. ## # ## ------------------------------- ## # # if DX_COND_html # # DX_CLEAN_HTML = @DX_DOCDIR@/html # # endif DX_COND_html # # ## ------------------------------ ## # ## Rules specific for CHM output. ## # ## ------------------------------ ## # # if DX_COND_chm # # DX_CLEAN_CHM = @DX_DOCDIR@/chm # # if DX_COND_chi # # DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi # # endif DX_COND_chi # # endif DX_COND_chm # # ## ------------------------------ ## # ## Rules specific for MAN output. ## # ## ------------------------------ ## # # if DX_COND_man # # DX_CLEAN_MAN = @DX_DOCDIR@/man # # endif DX_COND_man # # ## ------------------------------ ## # ## Rules specific for RTF output. ## # ## ------------------------------ ## # # if DX_COND_rtf # # DX_CLEAN_RTF = @DX_DOCDIR@/rtf # # endif DX_COND_rtf # # ## ------------------------------ ## # ## Rules specific for XML output. ## # ## ------------------------------ ## # # if DX_COND_xml # # DX_CLEAN_XML = @DX_DOCDIR@/xml # # endif DX_COND_xml # # ## ----------------------------- ## # ## Rules specific for PS output. ## # ## ----------------------------- ## # # if DX_COND_ps # # DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps # # DX_PS_GOAL = doxygen-ps # # doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps # # @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag # cd @DX_DOCDIR@/latex; \ # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ # $(DX_LATEX) refman.tex; \ # $(MAKEINDEX_PATH) refman.idx; \ # $(DX_LATEX) refman.tex; \ # countdown=5; \ # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ # refman.log > /dev/null 2>&1 \ # && test $$countdown -gt 0; do \ # $(DX_LATEX) refman.tex; \ # countdown=`expr $$countdown - 1`; \ # done; \ # $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi # # endif DX_COND_ps # # ## ------------------------------ ## # ## Rules specific for PDF output. ## # ## ------------------------------ ## # # if DX_COND_pdf # # DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf # # DX_PDF_GOAL = doxygen-pdf # # doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf # # @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag # cd @DX_DOCDIR@/latex; \ # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ # $(DX_PDFLATEX) refman.tex; \ # $(DX_MAKEINDEX) refman.idx; \ # $(DX_PDFLATEX) refman.tex; \ # countdown=5; \ # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ # refman.log > /dev/null 2>&1 \ # && test $$countdown -gt 0; do \ # $(DX_PDFLATEX) refman.tex; \ # countdown=`expr $$countdown - 1`; \ # done; \ # mv refman.pdf ../@PACKAGE@.pdf # # endif DX_COND_pdf # # ## ------------------------------------------------- ## # ## Rules specific for LaTeX (shared for PS and PDF). ## # ## ------------------------------------------------- ## # # if DX_COND_latex # # DX_CLEAN_LATEX = @DX_DOCDIR@/latex # # endif DX_COND_latex # # .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) # # .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) # # doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag # # doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) # # @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) # rm -rf @DX_DOCDIR@ # $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) # # DX_CLEANFILES = \ # @DX_DOCDIR@/@PACKAGE@.tag \ # -r \ # $(DX_CLEAN_HTML) \ # $(DX_CLEAN_CHM) \ # $(DX_CLEAN_CHI) \ # $(DX_CLEAN_MAN) \ # $(DX_CLEAN_RTF) \ # $(DX_CLEAN_XML) \ # $(DX_CLEAN_PS) \ # $(DX_CLEAN_PDF) \ # $(DX_CLEAN_LATEX) # # endif DX_COND_doc # # ----- end aminclude.am --------------------------------------- # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Oren Ben-Kiki # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. ## ----------## ## Defaults. ## ## ----------## DX_ENV="" AC_DEFUN([DX_FEATURE_doc], OFF) AC_DEFUN([DX_FEATURE_dot], OFF) AC_DEFUN([DX_FEATURE_man], OFF) AC_DEFUN([DX_FEATURE_html], ON) AC_DEFUN([DX_FEATURE_chm], OFF) AC_DEFUN([DX_FEATURE_chi], OFF) AC_DEFUN([DX_FEATURE_rtf], OFF) AC_DEFUN([DX_FEATURE_xml], OFF) AC_DEFUN([DX_FEATURE_pdf], OFF) AC_DEFUN([DX_FEATURE_ps], OFF) ## --------------- ## ## Private macros. ## ## --------------- ## # DX_ENV_APPEND(VARIABLE, VALUE) # ------------------------------ # Append VARIABLE="VALUE" to DX_ENV for invoking doxygen. AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) # DX_DIRNAME_EXPR # --------------- # Expand into a shell expression prints the directory part of a path. AC_DEFUN([DX_DIRNAME_EXPR], [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) # DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) # ------------------------------------- # Expands according to the M4 (static) status of the feature. AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) # DX_REQUIRE_PROG(VARIABLE, PROGRAM) # ---------------------------------- # Require the specified program to be found for the DX_CURRENT_FEATURE to work. AC_DEFUN([DX_REQUIRE_PROG], [ AC_PATH_TOOL([$1], [$2]) if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) # Fixing for autoconf 2.59 and above -- TaO090102 AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0) # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi ]) # DX_TEST_FEATURE(FEATURE) # ------------------------ # Expand to a shell expression testing whether the feature is active. AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) # DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) # ------------------------------------------------- # Verify that a required features has the right state before trying to turn on # the DX_CURRENT_FEATURE. AC_DEFUN([DX_CHECK_DEPEND], [ test "$DX_FLAG_$1" = "$2" \ || AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, requires, contradicts) doxygen-DX_CURRENT_FEATURE]) ]) # DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) # ---------------------------------------------------------- # Turn off the DX_CURRENT_FEATURE if the required feature is off. AC_DEFUN([DX_CLEAR_DEPEND], [ # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0) #test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ]) # DX_FEATURE_ARG(FEATURE, DESCRIPTION, # CHECK_DEPEND, CLEAR_DEPEND, # REQUIRE, DO-IF-ON, DO-IF-OFF) # -------------------------------------------- # Parse the command-line option controlling a feature. CHECK_DEPEND is called # if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), # otherwise CLEAR_DEPEND is called to turn off the default state if a required # feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional # requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and # DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. AC_DEFUN([DX_ARG_ABLE], [ AC_DEFUN([DX_CURRENT_FEATURE], [$1]) AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) AC_ARG_ENABLE(doxygen-$1, [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], [--enable-doxygen-$1]), DX_IF_FEATURE([$1], [don't $2], [$2]))], [ case "$enableval" in #( y|Y|yes|Yes|YES) AC_SUBST([DX_FLAG_$1], 1) $3 ;; #( n|N|no|No|NO) AC_SUBST([DX_FLAG_$1], 0) ;; #( *) AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) ;; esac ], [ AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) $4 ]) if DX_TEST_FEATURE([$1]); then $5 : fi if DX_TEST_FEATURE([$1]); then AM_CONDITIONAL(DX_COND_$1, :) $6 : else AM_CONDITIONAL(DX_COND_$1, false) $7 : fi ]) ## -------------- ## ## Public macros. ## ## -------------- ## # DX_XXX_FEATURE(DEFAULT_STATE) # ----------------------------- AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) # DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR]) # --------------------------------------------------------- # PROJECT also serves as the base name for the documentation files. # The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc". AC_DEFUN([DX_INIT_DOXYGEN], [ # Files: AC_SUBST([DX_PROJECT], [$1]) AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) # Environment variables used inside doxygen.cfg: DX_ENV_APPEND(SRCDIR, $srcdir) DX_ENV_APPEND(PROJECT, $DX_PROJECT) DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) # Doxygen itself: DX_ARG_ABLE(doc, [generate any doxygen documentation], [], [], [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) DX_REQUIRE_PROG([DX_PERL], perl)], [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) # Dot for graphics: DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_DOT], dot)], [DX_ENV_APPEND(HAVE_DOT, YES) DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], [DX_ENV_APPEND(HAVE_DOT, NO)]) # Man pages generation: DX_ARG_ABLE(man, [generate doxygen manual pages], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_MAN, YES)], [DX_ENV_APPEND(GENERATE_MAN, NO)]) # RTF file generation: DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_RTF, YES)], [DX_ENV_APPEND(GENERATE_RTF, NO)]) # XML file generation: DX_ARG_ABLE(xml, [generate doxygen XML documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_XML, YES)], [DX_ENV_APPEND(GENERATE_XML, NO)]) # (Compressed) HTML help generation: DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_HHC], hhc)], [DX_ENV_APPEND(HHC_PATH, $DX_HHC) DX_ENV_APPEND(GENERATE_HTML, YES) DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) # Seperate CHI file generation. DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], [DX_CHECK_DEPEND(chm, 1)], [DX_CLEAR_DEPEND(chm, 1)], [], [DX_ENV_APPEND(GENERATE_CHI, YES)], [DX_ENV_APPEND(GENERATE_CHI, NO)]) # Plain HTML pages generation: DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], [], [DX_ENV_APPEND(GENERATE_HTML, YES)], [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) # PostScript file generation: DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_LATEX], latex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_DVIPS], dvips) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # PDF file generation: DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) DX_REQUIRE_PROG([DX_EGREP], egrep)]) # LaTeX generation for PS and/or PDF: if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then AM_CONDITIONAL(DX_COND_latex, :) DX_ENV_APPEND(GENERATE_LATEX, YES) else AM_CONDITIONAL(DX_COND_latex, false) DX_ENV_APPEND(GENERATE_LATEX, NO) fi # Paper size for PS and/or PDF: AC_ARG_VAR(DOXYGEN_PAPER_SIZE, [a4wide (default), a4, letter, legal or executive]) case "$DOXYGEN_PAPER_SIZE" in #( "") AC_SUBST(DOXYGEN_PAPER_SIZE, "") ;; #( a4wide|a4|letter|legal|executive) DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) ;; #( *) AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) ;; esac #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV ]) pion-5.0.6+dfsg.orig/build/pion.ico0000644000372000001440000000725612314121350016501 0ustar robertousers(6 ^@@h F( wwwwwwwwwwwwwwwwwwwwwwwwwxwwwwxwwxwxwxwwwxwxwwwwwwwwwwwwwwwwww( @wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwwwwwwxwxwwwwwwwwwwwxwwwxwwwxwwwwwwwwwwwwwwwwwwwwwxwwwwwwwwxwwwwwwwwxwwwwwwwwxwwwwwwwwxwwwwwwwwxwwwwwwwwwwwxwwwwwwwwwwwxwwwwwxwwwwwxwwwwwwwwwwwwwxwwwwwwwwwxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(@xxxwxxxxwwxwxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwxwxwxwxxwwwxxxpion-5.0.6+dfsg.orig/build/doxygen.inc0000644000372000001440000000670712314121350017210 0ustar robertousers## --------------------------------- ## ## Format-independent Doxygen rules. ## ## --------------------------------- ## if DX_COND_doc ## ------------------------------- ## ## Rules specific for HTML output. ## ## ------------------------------- ## if DX_COND_html DX_CLEAN_HTML = @DX_DOCDIR@/html endif DX_COND_html ## ------------------------------ ## ## Rules specific for CHM output. ## ## ------------------------------ ## if DX_COND_chm DX_CLEAN_CHM = @DX_DOCDIR@/chm if DX_COND_chi DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi endif DX_COND_chi endif DX_COND_chm ## ------------------------------ ## ## Rules specific for MAN output. ## ## ------------------------------ ## if DX_COND_man DX_CLEAN_MAN = @DX_DOCDIR@/man endif DX_COND_man ## ------------------------------ ## ## Rules specific for RTF output. ## ## ------------------------------ ## if DX_COND_rtf DX_CLEAN_RTF = @DX_DOCDIR@/rtf endif DX_COND_rtf ## ------------------------------ ## ## Rules specific for XML output. ## ## ------------------------------ ## if DX_COND_xml DX_CLEAN_XML = @DX_DOCDIR@/xml endif DX_COND_xml ## ----------------------------- ## ## Rules specific for PS output. ## ## ----------------------------- ## if DX_COND_ps DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps DX_PS_GOAL = doxygen-ps doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag cd @DX_DOCDIR@/latex; \ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ $(DX_LATEX) refman.tex; \ $(MAKEINDEX_PATH) refman.idx; \ $(DX_LATEX) refman.tex; \ countdown=5; \ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ refman.log > /dev/null 2>&1 \ && test $$countdown -gt 0; do \ $(DX_LATEX) refman.tex; \ countdown=`expr $$countdown - 1`; \ done; \ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi endif DX_COND_ps ## ------------------------------ ## ## Rules specific for PDF output. ## ## ------------------------------ ## if DX_COND_pdf DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf DX_PDF_GOAL = doxygen-pdf doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag cd @DX_DOCDIR@/latex; \ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ $(DX_PDFLATEX) refman.tex; \ $(DX_MAKEINDEX) refman.idx; \ $(DX_PDFLATEX) refman.tex; \ countdown=5; \ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ refman.log > /dev/null 2>&1 \ && test $$countdown -gt 0; do \ $(DX_PDFLATEX) refman.tex; \ countdown=`expr $$countdown - 1`; \ done; \ mv refman.pdf ../@PACKAGE@.pdf endif DX_COND_pdf ## ------------------------------------------------- ## ## Rules specific for LaTeX (shared for PS and PDF). ## ## ------------------------------------------------- ## if DX_COND_latex DX_CLEAN_LATEX = @DX_DOCDIR@/latex endif DX_COND_latex ## --------------- ## ## Global settings ## ## --------------- ## DX_CLEANFILES = \ @DX_DOCDIR@/@PACKAGE@.tag \ $(DX_CLEAN_HTML) \ $(DX_CLEAN_CHM) \ $(DX_CLEAN_CHI) \ $(DX_CLEAN_MAN) \ $(DX_CLEAN_RTF) \ $(DX_CLEAN_XML) \ $(DX_CLEAN_PS) \ $(DX_CLEAN_PDF) \ $(DX_CLEAN_LATEX) .PHONY: doxygen-run doxygen-doc doxygen-clean $(DX_PS_GOAL) $(DX_PDF_GOAL) .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_DOCDIR@/@PACKAGE@.tag: $(srcdir)/$(DX_CONFIG) rm -rf $(DX_CLEANFILES) $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) doxygen-clean: rm -rf $(DX_CLEANFILES) endif DX_COND_doc pion-5.0.6+dfsg.orig/build/ax_boost_base.m40000644000372000001440000001510712314121350020104 0ustar robertousers##### http://autoconf-archive.cryp.to/ax_boost_base.html # # SYNOPSIS # # AX_BOOST_BASE([MINIMUM-VERSION]) # # DESCRIPTION # # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro # searchs under /usr, /usr/local, and /opt, and evaluates the # $BOOST_ROOT environment variable. Further documentation is # available at . # # This macro calls: # # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) # # And sets: # # HAVE_BOOST # # LAST MODIFICATION # # 2007-03-15 # # COPYLEFT # # Copyright (c) 2007 Thomas Porschberg # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AX_BOOST_BASE], [ AC_ARG_WITH([boost], AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]), [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi ], [want_boost="yes"]) if test "x$want_boost" = "xyes"; then boost_lib_version_req=ifelse([$1], ,1.20.0,$1) boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) succeeded=no dnl first we check the system location for boost libraries dnl this location ist chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" BOOST_CPPFLAGS="-I$ac_boost_path/include" else for ac_boost_path_tmp in /usr /usr/local /opt ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then BOOST_HOME_DIR="$ac_boost_path_tmp" BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else for ac_boost_path in /usr /usr/local /opt ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" BOOST_LDFLAGS="-L$best_path/lib" BOOST_HOME_DIR="$best_path" if test "x$BOOST_ROOT" != "x"; then if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi else AC_SUBST(BOOST_HOME_DIR) AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi ]) pion-5.0.6+dfsg.orig/build/common.inc0000644000372000001440000000025412314121350017012 0ustar robertousers# --------------------------------------- # pion-common automake configuration file # --------------------------------------- docs: doxygen-doc clean-docs: doxygen-clean pion-5.0.6+dfsg.orig/build/pion-net.props0000644000372000001440000000072312314121350017646 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 $(PION_NET_HOME)\include;%(AdditionalIncludeDirectories) pion-5.0.6+dfsg.orig/build/winbuild.bat0000644000372000001440000000274312314121350017341 0ustar robertousers@ECHO OFF SET PION_LIBS=C:\Atomic Labs\pion-libraries SETLOCAL EnableDelayedExpansion SET PION_HOME=C:\Atomic Labs\pion-platform SET INCLUDE=%PION_LIBS%\boost-1.37.0;%PION_LIBS%\bzip2-1.0.5\include;%PION_LIBS%\dssl-1.6.8\src;%PION_LIBS%\iconv-1.9.2\include;%PION_LIBS%\libxml2-2.6.30\include;%PION_LIBS%\log4cplus-1.0.3\include;%PION_LIBS%\openssl-0.9.8l\inc32;%PION_LIBS%\sqlapi-3.7.24;%PION_LIBS%\yajl-1.0.5\include;%PION_LIBS%\zlib-1.2.3\include;%PION_LIBS%\WpdPack-4.0.2\Include;%INCLUDE% SET LIB=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\lib;%PION_LIBS%\dssl-1.6.8\release;%PION_LIBS%\iconv-1.9.2\lib;%PION_LIBS%\libxml2-2.6.30\lib;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\lib;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\lib;%PION_LIBS%\WpdPack-4.0.2\Lib;%LIB% SET PATH=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\bin;%PION_LIBS%\iconv-1.9.2\bin;%PION_LIBS%\libxml2-2.6.30\bin;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\bin;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\bin;%PION_LIBS%\WpdPack-4.0.2\Bin;%PATH% SET opts=/nologo /platform:Win32 /logcommands /nohtmllog /M1 /useenv SET conf=Release_DLL_full FOR %%I IN (%*) DO (SET opt=%%~I IF "!opt:~0,1!"=="/" SET opts=!opts! %%I IF "!opt!"=="debug" SET conf=Debug_DLL_full IF "!opt!"=="release" SET conf=Release_DLL_full) FOR %%S in (*.sln) DO vcbuild %opts% "/logfile:%%~nS[%conf%].log" %%S "%conf%|Win32" pion-5.0.6+dfsg.orig/build/Release_static_pion.props0000644000372000001440000000125312314121350022070 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 PION_STATIC_LINKING;NDEBUG;PION_FULL;%(PreprocessorDefinitions) MultiThreadedDLL ProgramDatabase pion-5.0.6+dfsg.orig/build/third_party_static_libs_x64.props0000644000372000001440000001063212314121350023527 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib\x64 C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib\x64 C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib64 C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib\x64 C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin\x64 C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc64 C:\openssl-1.0.1c\lib\x64 C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\bin C:\zlib-1.2.7\include C:\zlib-1.2.7\lib\x64 <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);%(AdditionalIncludeDirectories) LOG4CPLUS_STATIC;LOG4CXX_STATIC;U_STATIC_IMPLEMENTATION;LIBXML_STATIC;%(PreprocessorDefinitions) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) pion-5.0.6+dfsg.orig/build/mac_switch_gcc.sh0000755000372000001440000000043712314121350020326 0ustar robertousers#!/bin/sh echo Switching to gcc-$1 ln -sf /usr/bin/gcc-$1 /usr/bin/cc ln -sf /usr/bin/gcc-$1 /usr/bin/CC ln -sf /usr/bin/gcc-$1 /usr/bin/gcc ln -sf /usr/bin/cpp-$1 /usr/bin/cpp ln -sf /usr/bin/c++-$1 /usr/bin/c++ ln -sf /usr/bin/g++-$1 /usr/bin/g++ ln -sf /usr/bin/gcov-$1 /usr/bin/gcov pion-5.0.6+dfsg.orig/build/link_log4cxx.sh0000755000372000001440000001021612314121350017772 0ustar robertousers#!/bin/sh cd src/main/cpp g++ -shared -nostdlib /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o \ .libs/action.o .libs/appenderattachableimpl.o .libs/appenderskeleton.o .libs/aprinitializer.o .libs/asyncappender.o .libs/basicconfigurator.o \ .libs/bufferedwriter.o .libs/bytearrayinputstream.o .libs/bytearrayoutputstream.o .libs/bytebuffer.o .libs/cacheddateformat.o \ .libs/charsetdecoder.o .libs/charsetencoder.o .libs/class.o .libs/classnamepatternconverter.o .libs/classregistration.o .libs/condition.o \ .libs/configurator.o .libs/consoleappender.o .libs/cyclicbuffer.o .libs/dailyrollingfileappender.o .libs/datagrampacket.o .libs/datagramsocket.o \ .libs/date.o .libs/dateformat.o .libs/datelayout.o .libs/datepatternconverter.o .libs/defaultloggerfactory.o .libs/defaultconfigurator.o \ .libs/defaultrepositoryselector.o .libs/domconfigurator.o .libs/exception.o .libs/fallbackerrorhandler.o .libs/file.o .libs/fileappender.o \ .libs/filedatepatternconverter.o .libs/fileinputstream.o .libs/filelocationpatternconverter.o .libs/fileoutputstream.o .libs/filerenameaction.o \ .libs/filewatchdog.o .libs/filter.o .libs/filterbasedtriggeringpolicy.o .libs/fixedwindowrollingpolicy.o .libs/formattinginfo.o \ .libs/fulllocationpatternconverter.o .libs/gzcompressaction.o .libs/hierarchy.o .libs/htmllayout.o .libs/inetaddress.o .libs/inputstream.o \ .libs/inputstreamreader.o .libs/integer.o .libs/integerpatternconverter.o .libs/layout.o .libs/level.o .libs/levelmatchfilter.o \ .libs/levelrangefilter.o .libs/levelpatternconverter.o .libs/linelocationpatternconverter.o .libs/lineseparatorpatternconverter.o \ .libs/literalpatternconverter.o .libs/loggerpatternconverter.o .libs/loggingeventpatternconverter.o .libs/loader.o .libs/locale.o \ .libs/locationinfo.o .libs/logger.o .libs/loggingevent.o .libs/loglog.o .libs/logmanager.o .libs/logstream.o .libs/manualtriggeringpolicy.o \ .libs/messagebuffer.o .libs/messagepatternconverter.o .libs/methodlocationpatternconverter.o .libs/mdc.o .libs/mutex.o .libs/nameabbreviator.o \ .libs/namepatternconverter.o .libs/ndcpatternconverter.o .libs/ndc.o .libs/nteventlogappender.o .libs/objectimpl.o .libs/objectptr.o \ .libs/objectoutputstream.o .libs/obsoleterollingfileappender.o .libs/odbcappender.o .libs/onlyonceerrorhandler.o .libs/optionconverter.o \ .libs/outputdebugstringappender.o .libs/outputstream.o .libs/outputstreamwriter.o .libs/patternconverter.o .libs/patternlayout.o \ .libs/patternparser.o .libs/pool.o .libs/properties.o .libs/propertiespatternconverter.o .libs/propertyconfigurator.o \ .libs/propertyresourcebundle.o .libs/propertysetter.o .libs/reader.o .libs/relativetimedateformat.o .libs/relativetimepatternconverter.o \ .libs/resourcebundle.o .libs/rollingfileappender.o .libs/rollingpolicy.o .libs/rollingpolicybase.o .libs/rolloverdescription.o .libs/rootlogger.o \ .libs/serversocket.o .libs/simpledateformat.o .libs/simplelayout.o .libs/sizebasedtriggeringpolicy.o .libs/smtpappender.o .libs/socket.o \ .libs/socketappender.o .libs/socketappenderskeleton.o .libs/sockethubappender.o .libs/socketoutputstream.o .libs/strftimedateformat.o \ .libs/stringhelper.o .libs/stringmatchfilter.o .libs/stringtokenizer.o .libs/synchronized.o .libs/syslogappender.o .libs/syslogwriter.o \ .libs/system.o .libs/systemerrwriter.o .libs/systemoutwriter.o .libs/telnetappender.o .libs/threadcxx.o .libs/threadlocal.o \ .libs/threadspecificdata.o .libs/threadpatternconverter.o .libs/throwableinformationpatternconverter.o .libs/timezone.o \ .libs/timebasedrollingpolicy.o .libs/transform.o .libs/triggeringpolicy.o .libs/transcoder.o .libs/ttcclayout.o .libs/writer.o \ .libs/writerappender.o .libs/xmllayout.o .libs/xmlsocketappender.o .libs/zipcompressaction.o /usr/lib64/libaprutil-1.so -lldap -llber -ldb-4.3 \ -lexpat /usr/lib64/libapr-1.so -lpthread -ldl -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64 \ -L/lib/../lib64 -L/usr/lib/../lib64 -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtendS.o \ /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crtn.o -Wl,-soname -Wl,liblog4cxx.so.10 -o .libs/liblog4cxx.so.10.0.0 pion-5.0.6+dfsg.orig/build/winrun.bat0000644000372000001440000000062312314121350017041 0ustar robertousers@ECHO OFF SET PION_LIBS=C:\Atomic Labs\pion-libraries SETLOCAL EnableDelayedExpansion SET PATH=%PION_LIBS%\boost-1.37.0\lib;%PION_LIBS%\bzip2-1.0.5\bin;%PION_LIBS%\iconv-1.9.2\bin;%PION_LIBS%\libxml2-2.6.30\bin;%PION_LIBS%\log4cplus-1.0.3\bin;%PION_LIBS%\openssl-0.9.8l\bin;%PION_LIBS%\sqlapi-3.7.24\bin;%PION_LIBS%\yajl-1.0.5\bin;%PION_LIBS%\zlib-1.2.3\bin;%PION_LIBS%\WpdPack-4.0.2\Bin;%PATH% %* pion-5.0.6+dfsg.orig/build/Debug_static_pion.props0000644000372000001440000000143412314121350021537 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 Disabled PION_STATIC_LINKING;_DEBUG;PION_FULL;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL EditAndContinue pion-5.0.6+dfsg.orig/build/common.pl0000644000372000001440000000351012314121350016652 0ustar robertousers# ------------------------------------------------ # pion-common common perl subroutines used by pion # ------------------------------------------------ use File::Spec; use File::Path; use File::Copy; # ---------------------- # some helpful functions # ---------------------- # recursively copies an entire directory tree, excluding anything that starts with a dot sub copyDirWithoutDotFiles(@) { my $src_dir = shift(); my $dst_dir = shift(); my %templates = @_; # make sure directory exists mkpath($dst_dir); # get list of files in source directory opendir(DIR, $src_dir); my @files = readdir(DIR); closedir(DIR); # iterate through source files foreach (@files) { if ( ! /^\./ ) { my $src_file = File::Spec->catfile($src_dir, $_); my $dst_file = File::Spec->catfile($dst_dir, $_); if (-d $src_file) { copyDirWithoutDotFiles($src_file, $dst_file, %templates); } elsif ( scalar keys %templates == 0 ) { # no templates specified -> just copy the file as-is copy($src_file, $dst_file); } else { # template parameters were specified # process key->value parameters while copying the file # WARNING: this probably only works for text files open(FROMFILE, $src_file) or die "could not open source template ($src_file)"; open(TOFILE, ">", $dst_file) or die "could not open $dst_file for writing"; while ( ) { while ( ($key, $value) = each %templates ) { s,\@$key\@,$value,; } print TOFILE $_; } close(FROMFILE); close(TOFILE); } } } } 1;pion-5.0.6+dfsg.orig/build/ax_compiler_vendor.m40000644000372000001440000000570412314121350021155 0ustar robertousers##### http://autoconf-archive.cryp.to/ax_compiler_vendor.html # # SYNOPSIS # # AX_COMPILER_VENDOR # # DESCRIPTION # # Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, # sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, # microsoft, watcom, etc. The vendor is returned in the cache # variable $ax_cv_c_compiler_vendor for C and # $ax_cv_cxx_compiler_vendor for C++. # # LAST MODIFICATION # # 2005-05-30 # # COPYLEFT # # Copyright (c) 2005 Steven G. Johnson # Copyright (c) 2005 Matteo Frigo # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AX_COMPILER_VENDOR], [ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) thisisanerror; #endif ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) done ]) ]) pion-5.0.6+dfsg.orig/build/make_rpm.pl0000644000372000001440000002062412314121350017162 0ustar robertousers#!/usr/bin/perl # -------------------------------------------------- # make_rpm.pl: script for building pion rpm packages # -------------------------------------------------- use Cwd; use File::Spec; use File::Path; use File::Copy; use File::Glob ':glob'; # include perl source with common subroutines require File::Spec->catfile( ("..", "pion-core", "common", "build"), "common.pl"); # ----------------------------------- # process argv & set global variables # ----------------------------------- # check command line parameters die("usage: make_rpm.pl [--nostrip]") if ($#ARGV < 1 || $#ARGV > 2 || ($#ARGV == 2 && $ARGV[2] ne "--nostrip")); # must be run as root die("This script must be run as root!") if $>!=0; # set some global variables $VERSION = $ARGV[0]; $RELEASE = $ARGV[1]; # check for --nostrip option if ($ARGV[2] eq "--nostrip") { $INSTALL_BIN = 'install'; $SPEC_OPTIONS = '%define __os_install_post %{nil}'; } else { $INSTALL_BIN = 'install -s'; $SPEC_OPTIONS = ''; } # check validity of RELEASE parameter die("Second parameter must be format (i.e. \"1.el5\")") if ($RELEASE !~ m/^\d+\..+$/); # find binary directory $BIN_DIR = "bin"; $RPMS_DIR = "/usr/src/redhat/RPMS"; $BUILD_DIR = "/usr/src/redhat/BUILD"; $DIR_GLOB = $BIN_DIR . "/pion-*" . $VERSION; @PACKAGES = bsd_glob( $DIR_GLOB ); die("error: unable to find binary directory") if ($#PACKAGES != 0); $EDITION = $PACKAGE_BASE = $PACKAGE_DIR = $PACKAGES[0]; if ( $PACKAGE_DIR =~ m/.*pion-[a-z]+-.*/ ) { $PACKAGE_BASE =~ s/.*(pion-[a-z]+)-.*/$1/; $EDITION =~ s/.*pion-([a-z]+)-.*/$1/; } else { $PACKAGE_BASE =~ s/.*(pion)-.*/$1/; $EDITION = ""; } $BIN_SRC_BASE = $PACKAGE_BASE . "-" . $VERSION . "-" . $RELEASE; $BIN_SRC_DIR = "$BUILD_DIR/$BIN_SRC_BASE"; $SPEC_FILE_NAME = "/tmp/$BIN_SRC_BASE.spec"; $CONFIG_DIR = File::Spec->catdir( ($PACKAGE_DIR, "config") ); $PLUGINS_DIR = File::Spec->catdir( ($PACKAGE_DIR, "plugins") ); $LIBS_DIR = File::Spec->catdir( ($PACKAGE_DIR, "libs") ); $UI_DIR = File::Spec->catdir( ($PACKAGE_DIR, "ui") ); # ------------ # main process # ------------ die("error: $PACKAGE_DIR is not a directory") if (! -d $PACKAGE_DIR); die("error: $CONFIG_DIR is not a directory") if (! -d $CONFIG_DIR); die("error: $PLUGINS_DIR is not a directory") if (! -d $PLUGINS_DIR); die("error: $LIBS_DIR is not a directory") if (! -d $LIBS_DIR); die("error: $UI_DIR is not a directory") if (! -d $UI_DIR); print "* Building RPM binary package for " . $TARBALL_BASE . "\n"; print "* Generating RPM spec file..\n"; # prepare some vars for spec file if ($EDITION eq "core") { $spec_license = "GPL"; $config_file_glob = "*.{xml,txt,pem}"; $install_perl_scripts = ""; $extra_config_files = ""; } else { $spec_license = "commercial"; $config_file_glob = "*.{xml,txt,pem}"; $install_perl_scripts = "install -m 660 $BIN_SRC_DIR/config/*.pl \$RPM_BUILD_ROOT/var/lib/pion"; $extra_config_files = "\%config /etc/pion/SearchEngines.xml\n\%config(noreplace) /etc/pion/ReplayQueries.xml\n\%config(noreplace) /etc/pion/robots.xml"; } $SPEC_POST="/sbin/ldconfig"; $SPEC_POSTUN="/sbin/ldconfig"; @spec_libs = bsd_glob($LIBS_DIR . "/*"); @purge_scripts = bsd_glob($CONFIG_DIR . "/*.pl"); # open and write the spec file open(SPEC_FILE, ">$SPEC_FILE_NAME") or die("Unable to open spec file: $SPEC_FILE_NAME"); print SPEC_FILE << "END_SPEC_FILE"; Summary: Software for real-time data capture, processing and integration Name: $PACKAGE_BASE Version: $VERSION Release: $RELEASE Vendor: Atomic Labs, Inc. License: $spec_license Group: System Environment/Daemons BuildRoot: /tmp/\%{name}-buildroot \%define debug_package \%{nil} \%description Pion captures millions of events per second from hard to manage sources such as log files, live network traffic and clickstream data. Data is filtered and sorted before being delivered to Pion's visual event processing interface. Events captured by Pion are processed in real-time through Pion's visual event processing interface. Data can easily be filtered, transformed, sessionized and aggregated before being delivered to the data warehouse for storage and future use. Data can be easily loaded into a variety of popular databases, or into an embedded SQLite database for quick access. Connect Pion's data up to your reporting packages and real-time dashboards for up-to-the-minute operational intelligence. \%prep \%build \%pre useradd -r -c "Pion" pion 2> /dev/null || true \%post $SPEC_POST \%postun #userdel pion 2> /dev/null || true $SPEC_POSTUN \%install rm -rf \$RPM_BUILD_ROOT mkdir -p \$RPM_BUILD_ROOT/etc/rc.d/init.d mkdir -p \$RPM_BUILD_ROOT/etc/pion mkdir -p \$RPM_BUILD_ROOT/etc/pion/vocabularies mkdir -p \$RPM_BUILD_ROOT/etc/pion/pymodules mkdir -p \$RPM_BUILD_ROOT/var/log/pion mkdir -p \$RPM_BUILD_ROOT/var/lib/pion mkdir -p \$RPM_BUILD_ROOT/usr/bin mkdir -p \$RPM_BUILD_ROOT/usr/lib mkdir -p \$RPM_BUILD_ROOT/usr/share/pion/ui mkdir -p \$RPM_BUILD_ROOT/usr/share/pion/plugins mkdir -p \$RPM_BUILD_ROOT/usr/share/doc/$PACKAGE_BASE-$VERSION install -m 660 $BIN_SRC_DIR/config/$config_file_glob \$RPM_BUILD_ROOT/etc/pion $install_perl_scripts install -m 660 $BIN_SRC_DIR/config/vocabularies/*.xml \$RPM_BUILD_ROOT/etc/pion/vocabularies install -m 660 $BIN_SRC_DIR/config/pymodules/*.py \$RPM_BUILD_ROOT/etc/pion/pymodules install -m 775 $BIN_SRC_DIR/pion.service \$RPM_BUILD_ROOT/etc/rc.d/init.d/pion $INSTALL_BIN $BIN_SRC_DIR/plugins/* \$RPM_BUILD_ROOT/usr/share/pion/plugins $INSTALL_BIN $BIN_SRC_DIR/libs/* \$RPM_BUILD_ROOT/usr/lib $INSTALL_BIN $BIN_SRC_DIR/pion \$RPM_BUILD_ROOT/usr/bin/pion $INSTALL_BIN $BIN_SRC_DIR/piondb \$RPM_BUILD_ROOT/usr/bin/piondb install $BIN_SRC_DIR/pget.py \$RPM_BUILD_ROOT/usr/bin/pget.py install $BIN_SRC_DIR/pmon.py \$RPM_BUILD_ROOT/usr/bin/pmon.py install $BIN_SRC_DIR/pupgrade.py \$RPM_BUILD_ROOT/usr/bin/pupgrade.py install $BIN_SRC_DIR/httpbl.py \$RPM_BUILD_ROOT/usr/bin/httpbl.py cp -r $BIN_SRC_DIR/ui/* \$RPM_BUILD_ROOT/usr/share/pion/ui cp $BIN_SRC_DIR/*.txt $BIN_SRC_DIR/*.pdf \$RPM_BUILD_DIR \%clean rm -rf \$RPM_BUILD_ROOT %define debug_package %{nil} $SPEC_OPTIONS \%files \%defattr(-,pion,pion) \%dir /etc/pion/ \%config /etc/pion/pymodules \%config /etc/pion/logconfig.txt \%config(noreplace) /etc/pion/codecs.xml \%config(noreplace) /etc/pion/databases.xml \%config(noreplace) /etc/pion/dbengines.xml \%config(noreplace) /etc/pion/platform.xml \%config(noreplace) /etc/pion/protocols.xml \%config(noreplace) /etc/pion/reactors.xml \%config(noreplace) /etc/pion/services.xml \%config(noreplace) /etc/pion/sslkey.pem \%config(noreplace) /etc/pion/users.xml \%config(noreplace) /etc/pion/vocabularies.xml \%config(noreplace) /etc/pion/vocabularies $extra_config_files \%dir /var/lib/pion \%dir /var/log/pion \%defattr(-,root,root) \%doc HISTORY.txt \%doc LICENSE.txt \%doc README.txt \%doc pion-overview.pdf \%doc pion-replay-guide.pdf \%doc pion-setup-wizard.pdf \%defattr(755,root,root) /usr/bin/pion /usr/bin/piondb /usr/bin/pget.py* /usr/bin/pmon.py* /usr/bin/pupgrade.py* /usr/bin/httpbl.py* \%defattr(-,root,root) /usr/share/pion/ui \%defattr(755,root,root) /etc/rc.d/init.d/pion /usr/share/pion/plugins END_SPEC_FILE # output library file names foreach $_ (@spec_libs) { s[$LIBS_DIR][/usr/lib]; print SPEC_FILE $_ . "\n"; } # output purge scripts (if any) foreach $_ (@purge_scripts) { s[$CONFIG_DIR][/var/lib/pion]; print SPEC_FILE $_ . "\n"; } # close the spec file close(SPEC_FILE); print "* Preparing binary source directory..\n"; `rm -rf $BIN_SRC_DIR`; copyDirWithoutDotFiles($PACKAGE_DIR, $BIN_SRC_DIR); if ($EDITION eq "core") { copyDirWithoutDotFiles("platform/build/rpm", $BIN_SRC_DIR); } else { # find the pion-core directory $_ = getcwd(); if (/pion-[^-]+-/) { s,/$,,; s,\\$,,; s,pion-[^-]+-(.*),pion-core-$1,; if (-d $_) { $PION_PLATFORM_DIR = $_; } else { $PION_PLATFORM_DIR = File::Spec->catdir( ("..", "pion-core") ); } } else { $PION_PLATFORM_DIR = File::Spec->catdir( ("..", "pion-core") ); } die("Could not find pion-core directory: $PION_CORE_DIR") if (! -d $PION_PLATFORM_DIR); copyDirWithoutDotFiles($PION_PLATFORM_DIR . "/platform/build/rpm", $BIN_SRC_DIR); copyDirWithoutDotFiles("enterprise/build/rpm", $BIN_SRC_DIR); } print "* Creating RPM files..\n"; `rpmbuild --quiet -bb $SPEC_FILE_NAME`; print "* Cleaning up..\n"; `mv $RPMS_DIR/*/* .`; `rm $SPEC_FILE_NAME`; `rm -rf $BIN_SRC_DIR`; print "* Done.\n"; pion-5.0.6+dfsg.orig/build/pion-config.inc0000644000372000001440000002576412314121350017747 0ustar robertousers# -------------------------------- # Pion autoconf configuration file # -------------------------------- # Set Pion version information PION_LIBRARY_VERSION=`echo $PACKAGE_VERSION | sed 's;^\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$;\1;'` # AC_MSG_NOTICE("Pion Library Version: $PION_LIBRARY_VERSION") AC_SUBST(PION_LIBRARY_VERSION) AC_DEFINE_UNQUOTED([PION_VERSION],["$PACKAGE_VERSION"],[Define to the version number of Pion.]) # Note: AM_CONFIG_HEADER is deprecated AC_CONFIG_HEADERS(include/pion/config.hpp) # Check for --with-cygwin AC_MSG_CHECKING([for cygwin directory]) AC_ARG_WITH([cygwin], AC_HELP_STRING([--with-cygwin@<:@=DIR@:>@],[directory where cygwin is installed (Windows only)]), [with_cygwin=$withval], [with_cygwin=maybe]) if test "$with_cygwin" = "maybe"; then case "$build_os" in *cygwin*) PION_CYGWIN_DIRECTORY="c:/cygwin" AC_MSG_RESULT($PION_CYGWIN_DIRECTORY) ;; *) AC_MSG_RESULT(no) ;; esac elif test "$with_cygwin" != "no"; then PION_CYGWIN_DIRECTOR="$with_cygwin" AC_MSG_RESULT($PION_CYGWIN_DIRECTORY) else AC_MSG_RESULT(no) fi AC_DEFINE_UNQUOTED([PION_CYGWIN_DIRECTORY],["$PION_CYGWIN_DIRECTORY"],[Define to the directory where cygwin is installed.]) AC_SUBST(PION_CYGWIN_DIRECTORY) # Check for malloc_trim support AC_MSG_CHECKING(for malloc_trim() support) AC_TRY_LINK([#include ], [ malloc_trim(0); ], [ AC_MSG_RESULT(yes) AC_DEFINE([PION_HAVE_MALLOC_TRIM],[1],[Define to 1 if C library supports malloc_trim()]) ], [ AC_MSG_RESULT(no) ]) # Check for unordered container support AC_CHECK_HEADERS([tr1/unordered_map],[unordered_map_type=tr1_unordered_map],[]) if test "x$unordered_map_type" = "xtr1_unordered_map"; then # test to make sure it's good enough AC_MSG_CHECKING(if unordered_map is ok) AC_TRY_LINK([#include ],[ #if defined(__APPLE__) && (!defined(__apple_build_version__) || __apple_build_version__ < 5000000) #error completely broken on OSX, even for gcc 4.2 #elif !defined(__GNUC__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) return(0); #else #error only use gcc versions 4.1 or greater #endif ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) unordered_map_type="" ]) fi if test "x$unordered_map_type" = "x"; then AC_CHECK_HEADERS([ext/hash_map],[unordered_map_type=ext_hash_map],[]) fi if test "x$unordered_map_type" = "x"; then AC_CHECK_HEADERS([hash_map],[unordered_map_type=hash_map],[]) fi if test "$unordered_map_type" = "tr1_unordered_map"; then AC_DEFINE([PION_HAVE_UNORDERED_MAP],[1],[Define to 1 if you have the header file.]) elif test "$unordered_map_type" = "ext_hash_map"; then AC_DEFINE([PION_HAVE_EXT_HASH_MAP],[1],[Define to 1 if you have the header file.]) elif test "$unordered_map_type" = "hash_map"; then AC_DEFINE([PION_HAVE_HASH_MAP],[1],[Define to 1 if you have the header file.]) else AC_MSG_ERROR([C++ compiler does not seem to support unordered containers]) fi # Check for zlib AC_MSG_CHECKING([for gzip compression support (zlib)]) AC_ARG_WITH([zlib], AC_HELP_STRING([--with-zlib@<:@=DIR@:>@],[location of zlib library (for gzip compression); use --without-zlib to disable]), [ zlib_location=$withval ], [ zlib_location=yes ]) # Check if zlib location is specified if test "x_$zlib_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$zlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$zlib_location/include" LDFLAGS="$LDFLAGS -L$zlib_location/lib" fi # Check for zlib headers AC_CHECK_HEADERS([zlib.h],,AC_MSG_ERROR([Unable to find the zlib headers])) # Check for zlib library LIBS="$LIBS_SAVED -lz" AC_MSG_CHECKING(linking with zlib) AC_TRY_LINK([#include ],[ zlibVersion(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the zlib library) ]) LIBS="$LIBS_SAVED" PION_ZLIB="-lz" # Found the zlib library AC_DEFINE([PION_HAVE_ZLIB],[1],[Define to 1 if you have the `zlib' library.]) else # zlib is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_ZLIB) # Check for bzlib AC_MSG_CHECKING([for bzip2 compression support (bzlib)]) AC_ARG_WITH([bzlib], AC_HELP_STRING([--with-bzlib@<:@=DIR@:>@],[location of bzlib library (for bzip2 compression); use --without-bzlib to disable]), [ bzlib_location=$withval ], [ bzlib_location=yes ]) # Check if bzlib location is specified if test "x_$bzlib_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$bzlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$bzlib_location/include" LDFLAGS="$LDFLAGS -L$bzlib_location/lib" fi # Check for bzlib headers AC_CHECK_HEADERS([bzlib.h],,AC_MSG_ERROR([Unable to find the bzlib headers])) # Check for bzlib library LIBS="$LIBS_SAVED -lbz2" AC_MSG_CHECKING(linking with bzlib) AC_TRY_LINK([#include ],[ BZ2_bzlibVersion(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the bzlib library; use --without-bzlib to disable) ]) LIBS="$LIBS_SAVED" PION_BZLIB="-lbz2" # Found the bzlib library AC_DEFINE([PION_HAVE_BZLIB],[1],[Define to 1 if you have the `bzlib' library.]) else # bzlib is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_BZLIB) # Check for OpenSSL AC_MSG_CHECKING([for SSL support (openssl)]) AC_ARG_WITH([openssl], AC_HELP_STRING([--with-openssl@<:@=DIR@:>@],[location of OpenSSL library (enables SSL support); use --without-openssl to disable]), [ openssl_location=$withval ], [ openssl_location=yes ]) # Check if openssl location is specified if test "x_$openssl_location" != "x_no"; then AC_MSG_RESULT(yes) if test "x_$openssl_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$openssl_location/include" LDFLAGS="$LDFLAGS -L$openssl_location/lib" fi # Check for OpenSSL headers AC_CHECK_HEADERS([openssl/ssl.h],,AC_MSG_ERROR([Unable to find the OpenSSL headers])) # Check for OpenSSL library LIBS_SAVED="$LIBS" LIBS="-lssl -lcrypto $LIBS_SAVED" AC_MSG_CHECKING(linking with openssl) AC_TRY_LINK([#include ],[ SSL_library_init(); return(0); ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_RESULT(failed) AC_MSG_ERROR(Unable to link with the openssl library; use --without-openssl to disable) ]) LIBS="$LIBS_SAVED" PION_SSL_LIB="-lssl -lcrypto" # Found the OpenSSL library AC_MSG_NOTICE(Building Pion with support for SSL (using OpenSSL)) AC_DEFINE([PION_HAVE_SSL],[1],[Define to 1 if you have the `OpenSSL' library.]) else # SSL is disabled AC_MSG_RESULT(no) fi AC_SUBST(PION_SSL_LIB) # Check for logging support AC_ARG_ENABLE([logging], AC_HELP_STRING([--disable-logging],[disable all logging support (including std::ostream)]), [enable_logging=$enableval], [enable_logging=yes]) AC_ARG_WITH([ostream-logging], AC_HELP_STRING([--with-ostream-logging],[use std::ostream logging instead of library]), [ ostream_logging=yes ], [ ostream_logging=no ]) AC_ARG_WITH([log4cplus], AC_HELP_STRING([--with-log4cplus@<:@=DIR@:>@],[location of log4cplus library (recommended)]), [ log4cplus_location=$withval without_log4cxx=true without_log4cpp=true], []) AC_ARG_WITH([log4cxx], AC_HELP_STRING([--with-log4cxx@<:@=DIR@:>@],[location of log4cxx library]), [ log4cxx_location=$withval without_log4cplus=true without_log4cpp=true], []) AC_ARG_WITH([log4cpp], AC_HELP_STRING([--with-log4cpp@<:@=DIR@:>@],[location of log4cpp library]), [ log4cpp_location=$withval without_log4cplus=true without_log4cxx=true], []) if test "x$enable_logging" == "xno"; then # Display notice if no logging found AC_MSG_NOTICE(Logging has been disabled) AC_DEFINE([PION_DISABLE_LOGGING],[1],[Define to 1 to disable logging.]) elif test "x$ostream_logging" == "xyes"; then AC_MSG_NOTICE(Using std::ostream for logging) AC_DEFINE([PION_USE_OSTREAM_LOGGING],[1],[Define to 1 to use std::cout and std::cerr for logging.]) else # check for an available logging library (log4cplus, then log4cxx, then log4cpp) # log4cplus if test "$without_log4cplus" != "true"; then # Check if log4cplus location is specified if test "x$log4cplus_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cplus_location/include" LDFLAGS="$LDFLAGS -L$log4cplus_location/lib" fi # Check for log4cplus library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cplus" AC_MSG_CHECKING(log4cplus library) AC_TRY_LINK([#include ],[ log4cplus::Logger::getRoot(); return 0; ], [ # Found the log4cplus library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CPLUS],[1],[Define to 1 if you have the `log4cplus' library (-llog4cplus).]) AC_MSG_NOTICE(Using log4cplus for logging) without_log4cxx=true without_log4cpp=true PION_LOG_LIB="-llog4cplus" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # log4cxx if test "$without_log4cxx" != "true"; then # Check if log4cxx location is specified if test "x$log4cxx_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cxx_location/include" LDFLAGS="$LDFLAGS -L$log4cxx_location/lib" fi # Check for log4cxx library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cxx" AC_MSG_CHECKING(log4cxx library) AC_TRY_LINK([#include ],[ log4cxx::Logger::getRootLogger(); return 0; ], [ # Found the log4cxx library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CXX],[1],[Define to 1 if you have the `log4cxx' library (-llog4cxx).]) AC_MSG_NOTICE(Using log4cxx for logging) without_log4cplus=true without_log4cpp=true PION_LOG_LIB="-llog4cxx" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # log4cpp if test "$without_log4cpp" != "true"; then # Check if log4cpp location is specified if test "x$log4cpp_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cpp_location/include" LDFLAGS="$LDFLAGS -L$log4cpp_location/lib" fi # Check for log4cpp library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cpp" AC_MSG_CHECKING(log4cpp library) AC_TRY_LINK([#include ],[ log4cpp::Category::getRoot(); return 0; ], [ # Found the log4cpp library AC_MSG_RESULT(ok) AC_DEFINE([PION_USE_LOG4CPP],[1],[Define to 1 if you have the `log4cpp' library (-llog4cpp).]) AC_MSG_NOTICE(Using log4cpp for logging) without_log4cplus=true without_log4cxx=true PION_LOG_LIB="-llog4cpp" ], [ AC_MSG_RESULT(no) ]) LIBS="$LIBS_SAVED" fi # no log library found if test "x$PION_LOG_LIB" == "x"; then if test "x$ostream_logging" == "xno"; then AC_MSG_WARN(No logging library found - disabling logging) AC_DEFINE([PION_DISABLE_LOGGING],[1],[Define to 1 to disable logging.]) else AC_MSG_WARN(No logging library found - using std::ostream for logging) AC_DEFINE([PION_USE_OSTREAM_LOGGING],[1],[Define to 1 to use std::cout and std::cerr for logging.]) fi fi fi AC_SUBST(PION_LOG_LIB) # Set external library dependencies PION_EXTERNAL_LIBS="$BOOST_THREAD_LIB $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_REGEX_LIB $BOOST_DATE_TIME_LIB $PION_LOG_LIB $PION_SSL_LIB $PION_ZLIB $PION_BZLIB $PION_EXTERNAL_LIBS" AC_SUBST(PION_EXTERNAL_LIBS) pion-5.0.6+dfsg.orig/build/depth_3_pion-common.props0000644000372000001440000000076012314121350021757 0ustar robertousers ../.. <_ProjectFileVersion>10.0.40219.1 $(PION_COMMON_HOME) pion-5.0.6+dfsg.orig/build/pion-boost.inc0000644000372000001440000001311712314121350017615 0ustar robertousers# -------------------------------- # Pion autoconf configuration file # -------------------------------- # Check for Boost AX_BOOST_BASE([1.35]) # AC_MSG_NOTICE(Boost home directory: $BOOST_HOME_DIR) CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" # Check for Boost library extension AC_MSG_CHECKING([boost library extension]) AC_ARG_WITH([boost-extension], AC_HELP_STRING([--with-boost-extension@<:@=EXT@:>@],[extension used for boost library files]), [ boost_ext=$withval ], [ detect_boost_ext=true ]) # Check if openssl location is specified if test "$detect_boost_ext" != "true"; then # use provided extension for boost library files BOOST_LIB_EXTENSION="$boost_ext" else # Attempt to Autodetect Boost library extension by looking for thread library (i.e. "-gcc41-mt") for boost_thread_library in `ls $BOOST_HOME_DIR/lib*/libboost_thread*-mt*{dylib,dll,so,a}* 2>/dev/null` ; do if test -r $boost_thread_library ; then BOOST_LIB_EXTENSION=`echo $boost_thread_library | sed 's,.*/,,' | sed -e 's;^libboost_thread\(.*\)\.dylib.*$;\1;' -e 's;^libboost_thread\(.*\)\.dll*$;\1;' -e 's;^libboost_thread\(.*\)\.so.*$;\1;' -e 's;^libboost_thread\(.*\)\.a*$;\1;'` break fi done fi if test "x$BOOST_LIB_EXTENSION" = "x"; then AC_MSG_RESULT("(none)") else AC_MSG_RESULT($BOOST_LIB_EXTENSION) fi AC_SUBST(BOOST_LIB_EXTENSION) # Check for Boost Date Time library BOOST_TRY_LIB=date_time BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::gregorian::date d(2007, 11, 11); return 0; ], [ AC_MSG_RESULT(ok) BOOST_DATE_TIME_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_DATE_TIME_LIB) # Check for Boost System library BOOST_TRY_LIB=system BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::system::error_code error_code; std::string message(error_code.message()); return 0; ], [ AC_MSG_RESULT(ok) BOOST_SYSTEM_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_SYSTEM_LIB) # Check for Boost Thread library BOOST_TRY_LIB=thread BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} ${BOOST_SYSTEM_LIB} ${BOOST_DATE_TIME_LIB}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include #include ], [ boost::thread current_thread; return 0; ], [ AC_MSG_RESULT(ok) BOOST_THREAD_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_THREAD_LIB) # Check for Boost Filesystem library BOOST_TRY_LIB=filesystem BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} $BOOST_SYSTEM_LIB" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::filesystem::path a_path; return 0; ], [ AC_MSG_RESULT(ok) BOOST_FILESYSTEM_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_FILESYSTEM_LIB) # Check for Boost Regex library BOOST_TRY_LIB=regex BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" AC_MSG_CHECKING([for boost::${BOOST_TRY_LIB} library]) AC_TRY_LINK([#include ], [ boost::regex exp(".*"); return 0; ], [ AC_MSG_RESULT(ok) BOOST_REGEX_LIB="-l${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" AC_SUBST(BOOST_REGEX_LIB) # Check for Boost Unit Test Framework AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests],[do not build and run the unit tests]), [enable_tests=$enableval], [enable_tests=yes]) if test "x$enable_tests" == "xno"; then # Display notice if unit tests are disabled AC_MSG_NOTICE([Unit tests are disabled]) else BOOST_TRY_LIB=unit_test_framework BOOST_TRY_LINK="$BOOST_HOME_DIR/lib/libboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}.a" # check if static version of lib is available if !(test -r "$BOOST_TRY_LINK"); then BOOST_TRY_LINK="-lboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" PION_TESTS_CPPFLAGS="-DBOOST_TEST_DYN_LINK" fi LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED ${BOOST_TRY_LINK}" CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS ${PION_TESTS_CPPFLAGS}" AC_MSG_CHECKING([for boost::test library]) AC_TRY_LINK([#include using namespace boost::unit_test; test_suite* init_unit_test_suite( int argc, char* argv[] ) { return BOOST_TEST_SUITE("Master test suite"); }], [], [ AC_MSG_RESULT(ok) BOOST_TEST_LIB="${BOOST_TRY_LINK}" ], [ AC_MSG_RESULT(not found) AC_MSG_ERROR(Unable to link with the boost::${BOOST_TRY_LIB} library) ]) LIBS="$LIBS_SAVED" CPPFLAGS="$CPPFLAGS_SAVED" PION_TESTS_MAKEDIRS="tests" fi AC_SUBST(BOOST_TEST_LIB) AC_SUBST(PION_TESTS_MAKEDIRS) AC_SUBST(PION_TESTS_CPPFLAGS) pion-5.0.6+dfsg.orig/build/pion_plugin.props0000644000372000001440000000234712314121350020444 0ustar robertousers $(PION_HOME)\platform\reactors\$(Configuration)_$(Platform) $(PION_HOME)\platform\databases\$(Configuration)_$(Platform) $(PION_HOME)\platform\protocols\$(Configuration)_$(Platform) $(PION_HOME)\platform\services\$(Configuration)_$(Platform) <_ProjectFileVersion>10.0.40219.1 $(Configuration)_$(PlatformName)\ $(REACTORS_DIR) $(DATABASES_DIR) $(PROTOCOLS_DIR) $(SERVICES_DIR) pion-5.0.6+dfsg.orig/build/Release_DLL_pion.props0000644000372000001440000000167312314121350021222 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 false /GL %(AdditionalOptions) BOOST_ALL_DYN_LINK;NDEBUG;%(PreprocessorDefinitions) MultiThreadedDLL ProgramDatabase true UseLinkTimeCodeGeneration pion-5.0.6+dfsg.orig/build/pion.props0000644000372000001440000000226112314121350017061 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)bin\$(Configuration)_$(PlatformName)\ $(SolutionDir)IntermediateOutput\$(ProjectName)\$(Configuration)_$(PlatformName)\ $(PION_COMMON_HOME)\include;%(AdditionalIncludeDirectories) WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_WIN32_WINNT=0x0500;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) true Level3 4267;4311;4312;4250;4251;4275;4503;%(DisableSpecificWarnings) Windows MachineX86 pion-5.0.6+dfsg.orig/build/third_party_static_libs_win32.props0000644000372000001440000001127012314121350024047 0ustar robertousers C:\boost\include\boost-1_51 C:\boost\lib C:\bzip2-1.0.6\include C:\bzip2-1.0.6\lib C:\iconv-1.9.2\include C:\iconv-1.9.2\lib C:\icu4c-49_1_2\icu\include C:\icu4c-49_1_2\icu\lib C:\libxml2-2.9.0\include C:\libxml2-2.9.0\lib C:\log4cplus-1.0.4.1\include C:\log4cplus-1.0.4.1\bin C:\apache\apache-log4cxx-0.10.0\src\main\include C:\apache\apache-log4cxx-0.10.0\bin C:\openssl-1.0.1c\inc32 C:\openssl-1.0.1c\lib C:\Python26\include C:\Python26\libs C:\yajl-2.0.5\include C:\yajl-2.0.5\bin C:\zlib-1.2.7\include C:\zlib-1.2.7\lib C:\sqlite-3.7.14.1\ C:\sqlite-3.7.14.1\lib\ <_ProjectFileVersion>10.0.40219.1 $(BOOST_INC);$(BZIP2_INC);$(ICONV_INC);$(ICU_INC);$(LIBXML_INC);$(LOG4CPLUS_INC);$(LOG4CXX_INC);$(OPENSSL_INC);$(PYTHON_INC);$(YAJL_INC);$(ZLIB_INC);$(SQLITE_INC);%(AdditionalIncludeDirectories) LOG4CPLUS_STATIC;LOG4CXX_STATIC;U_STATIC_IMPLEMENTATION;LIBXML_STATIC;%(PreprocessorDefinitions) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(LOG4CXX_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);%(AdditionalLibraryDirectories) $(BOOST_LIB);$(BZIP2_LIB);$(ICONV_LIB);$(ICU_LIB);$(LIBXML_LIB);$(LOG4CPLUS_LIB);$(OPENSSL_LIB);$(PYTHON_LIB);$(YAJL_LIB);$(ZLIB_LIB);$(SQLITE_LIB);%(AdditionalLibraryDirectories) $(BOOST_INC) $(BOOST_LIB) $(BZIP2_INC) $(BZIP2_LIB) $(ICONV_INC) $(ICONV_LIB) $(ICU_INC) $(ICU_LIB) $(LIBXML_INC) $(LIBXML_LIB) $(LOG4CPLUS_INC) $(LOG4CPLUS_LIB) $(LOG4CXX_INC) $(LOG4CXX_LIB) $(OPENSSL_INC) $(OPENSSL_LIB) $(PYTHON_INC) $(PYTHON_LIB) $(YAJL_INC) $(YAJL_LIB) $(ZLIB_INC) $(ZLIB_LIB) $(SQLITE_INC) $(SQLITE_LIB) pion-5.0.6+dfsg.orig/build/depth_2_pion-net.props0000644000372000001440000000133612314121350021254 0ustar robertousers ..\..\common .. <_ProjectFileVersion>10.0.40219.1 $(PION_COMMON_HOME) $(PION_NET_HOME) pion-5.0.6+dfsg.orig/build/Debug_DLL_pion.props0000644000372000001440000000162412314121350020664 0ustar robertousers <_ProjectFileVersion>10.0.40219.1 true Disabled BOOST_ALL_DYN_LINK;_DEBUG;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL EditAndContinue true pion-5.0.6+dfsg.orig/Makefile.in0000644000372000001440000007341112314121400015776 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/pion.pc.in \ $(top_srcdir)/build/doxygen.inc $(top_srcdir)/configure \ AUTHORS COPYING ChangeLog NEWS TODO m4/compile m4/config.guess \ m4/config.sub m4/depcomp m4/install-sh m4/ltmain.sh m4/missing subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = pion.pc CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -I build SUBDIRS = include src services utils @PION_TESTS_MAKEDIRS@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pion.pc EXTRA_DIST = README.md index.html autogen.sh *.sln *.xcodeproj *.vcxproj doc \ build/*.props build/*.sh build/*.pl build/*.bat build/*.dll \ build/pion.ico build/common.inc @DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html @DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm @DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi @DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man @DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf @DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf @DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex @DX_COND_doc_TRUE@DX_CLEANFILES = \ @DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \ @DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \ @DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX) all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build/doxygen.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): pion.pc: $(top_builddir)/config.status $(srcdir)/pion.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-pkgconfigDATA @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \ @DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \ @DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf @DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc doxygen-clean $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag @DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) @DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(srcdir)/$(DX_CONFIG) @DX_COND_doc_TRUE@ rm -rf $(DX_CLEANFILES) @DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) @DX_COND_doc_TRUE@doxygen-clean: @DX_COND_doc_TRUE@ rm -rf $(DX_CLEANFILES) docs: doxygen-doc clean-docs: doxygen-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/AUTHORS0000644000372000001440000000106012314121347015002 0ustar robertousersAuthors of the Pion Network Library: ==================================== Mignon Belongie Michael Dickey Stas Khirman Andrew C. Morrow Taneli Otala Parts of the Pion Network Library were derived from or inspired by the HTTP Server example in the asio documentation. Many thanks to Christopher M. Kohlhoff and all the contributors of Boost and asio, without whom this library would not have been possible. pion-5.0.6+dfsg.orig/utils/0000755000372000001440000000000012314121443015072 5ustar robertouserspion-5.0.6+dfsg.orig/utils/Makefile.in0000644000372000001440000004550712314121400017143 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = helloserver$(EXEEXT) piond$(EXEEXT) subdir = utils DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_helloserver_OBJECTS = helloserver.$(OBJEXT) helloserver_OBJECTS = $(am_helloserver_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent am_piond_OBJECTS = piond.$(OBJEXT) piond_OBJECTS = $(am_piond_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(helloserver_SOURCES) $(piond_SOURCES) DIST_SOURCES = $(helloserver_SOURCES) $(piond_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include helloserver_SOURCES = helloserver.cpp helloserver_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ helloserver_DEPENDENCIES = ../src/libpion.la piond_SOURCES = piond.cpp piond_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ piond_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = sslkey.pem testservices.html *.conf *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list helloserver$(EXEEXT): $(helloserver_OBJECTS) $(helloserver_DEPENDENCIES) @rm -f helloserver$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helloserver_OBJECTS) $(helloserver_LDADD) $(LIBS) piond$(EXEEXT): $(piond_OBJECTS) $(piond_DEPENDENCIES) @rm -f piond$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(piond_OBJECTS) $(piond_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helloserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/piond.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/utils/piond.vcxproj.filters0000644000372000001440000000200712314121350021263 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files pion-5.0.6+dfsg.orig/utils/testservices.conf0000644000372000001440000000236512314121350020467 0ustar robertousers## ## Simple configuration file to test pion-net web services ## ## Adds path to compiled web services built from source tarball ## path ../services/.libs path ../bin/Debug ## Hello World Service ## service /hello HelloService ## Service to echo requests ## service /echo EchoService ## Service to display & update cookies ## service /cookie CookieService ## Service to display log events ## service /log LogService ## Service to serve pion-net documentation ## service /doc FileService option /doc directory=../doc/html option /doc file=../doc/html/index.html option /doc cache=2 option /doc scan=3 ## Use testservices.html as an index page ## service /index.html FileService option /index.html file=../utils/testservices.html ## service / FileService option / file=../utils/testservices.html ## Service to demonstrate Authentication interface ## service /auth EchoService ## ## define type of authentication ## ## MUST be a first command in configuration file ## auth type can be defined once and only once! ## auth cookie ## ## Add /auth resource to set of password protected ## restrict /auth ## ## Add /protected resource to set of password protected ## restrict /protected ## ## define user ## user stas 123456 ## ## define user ## user mike 123456 pion-5.0.6+dfsg.orig/utils/piond.cpp0000644000372000001440000001574612314121350016721 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include // these are used only when linking to static web service libraries // #ifdef PION_STATIC_LINKING PION_DECLARE_PLUGIN(EchoService) PION_DECLARE_PLUGIN(FileService) PION_DECLARE_PLUGIN(HelloService) PION_DECLARE_PLUGIN(LogService) PION_DECLARE_PLUGIN(CookieService) using namespace std; using namespace pion; /// displays an error message if the arguments are invalid void argument_error(void) { std::cerr << "usage: piond [OPTIONS] RESOURCE WEBSERVICE" << std::endl << " piond [OPTIONS] -c SERVICE_CONFIG_FILE" << std::endl << "options: [-ssl PEM_FILE] [-i IP] [-p PORT] [-d PLUGINS_DIR] [-o OPTION=VALUE] [-v]" << std::endl; } /// main control function int main (int argc, char *argv[]) { static const unsigned int DEFAULT_PORT = 8080; // used to keep track of web service name=value options typedef std::vector > ServiceOptionsType; ServiceOptionsType service_options; // parse command line: determine port number, RESOURCE and WEBSERVICE boost::asio::ip::tcp::endpoint cfg_endpoint(boost::asio::ip::tcp::v4(), DEFAULT_PORT); std::string service_config_file; std::string resource_name; std::string service_name; std::string ssl_pem_file; bool ssl_flag = false; bool verbose_flag = false; for (int argnum=1; argnum < argc; ++argnum) { if (argv[argnum][0] == '-') { if (argv[argnum][1] == 'p' && argv[argnum][2] == '\0' && argnum+1 < argc) { // set port number ++argnum; cfg_endpoint.port(strtoul(argv[argnum], 0, 10)); if (cfg_endpoint.port() == 0) cfg_endpoint.port(DEFAULT_PORT); } else if (argv[argnum][1] == 'i' && argv[argnum][2] == '\0' && argnum+1 < argc) { // set ip address cfg_endpoint.address(boost::asio::ip::address::from_string(argv[++argnum])); } else if (argv[argnum][1] == 'c' && argv[argnum][2] == '\0' && argnum+1 < argc) { service_config_file = argv[++argnum]; } else if (argv[argnum][1] == 'd' && argv[argnum][2] == '\0' && argnum+1 < argc) { // add the service plug-ins directory to the search path try { plugin::add_plugin_directory(argv[++argnum]); } catch (error::directory_not_found&) { std::cerr << "piond: Web service plug-ins directory does not exist: " << argv[argnum] << std::endl; return 1; } } else if (argv[argnum][1] == 'o' && argv[argnum][2] == '\0' && argnum+1 < argc) { std::string option_name(argv[++argnum]); std::string::size_type pos = option_name.find('='); if (pos == std::string::npos) { argument_error(); return 1; } std::string option_value(option_name, pos + 1); option_name.resize(pos); service_options.push_back( std::make_pair(option_name, option_value) ); } else if (argv[argnum][1] == 's' && argv[argnum][2] == 's' && argv[argnum][3] == 'l' && argv[argnum][4] == '\0' && argnum+1 < argc) { ssl_flag = true; ssl_pem_file = argv[++argnum]; } else if (argv[argnum][1] == 'v' && argv[argnum][2] == '\0') { verbose_flag = true; } else { argument_error(); return 1; } } else if (argnum+2 == argc) { // second to last argument = RESOURCE resource_name = argv[argnum]; } else if (argnum+1 == argc) { // last argument = WEBSERVICE service_name = argv[argnum]; } else { argument_error(); return 1; } } if (service_config_file.empty() && (resource_name.empty() || service_name.empty())) { argument_error(); return 1; } // initialize signal handlers, etc. process::initialize(); // initialize log system (use simple configuration) logger main_log(PION_GET_LOGGER("piond")); logger pion_log(PION_GET_LOGGER("pion")); if (verbose_flag) { PION_LOG_SETLEVEL_DEBUG(main_log); PION_LOG_SETLEVEL_DEBUG(pion_log); } else { PION_LOG_SETLEVEL_INFO(main_log); PION_LOG_SETLEVEL_INFO(pion_log); } PION_LOG_CONFIG_BASIC; try { // add the Pion plug-ins installation directory to our path try { plugin::add_plugin_directory(PION_PLUGINS_DIRECTORY); } catch (error::directory_not_found&) { PION_LOG_WARN(main_log, "Default plug-ins directory does not exist: " << PION_PLUGINS_DIRECTORY); } // add the directory of the program we're running to our path try { plugin::add_plugin_directory(boost::filesystem::path(argv[0]).branch_path().string()); } catch (error::directory_not_found&) { PION_LOG_WARN(main_log, "Directory of current executable does not exist: " << boost::filesystem::path(argv[0]).branch_path()); } // create a server for HTTP & add the Hello Service http::plugin_server web_server(cfg_endpoint); if (ssl_flag) { #ifdef PION_HAVE_SSL // configure server for SSL web_server.set_ssl_key_file(ssl_pem_file); PION_LOG_INFO(main_log, "SSL support enabled using key file: " << ssl_pem_file); #else PION_LOG_ERROR(main_log, "SSL support is not enabled"); #endif } if (service_config_file.empty()) { // load a single web service using the command line arguments web_server.load_service(resource_name, service_name); // set web service options if any are defined for (ServiceOptionsType::iterator i = service_options.begin(); i != service_options.end(); ++i) { web_server.set_service_option(resource_name, i->first, i->second); } } else { // load services using the configuration file web_server.load_service_config(service_config_file); } // startup the server web_server.start(); process::wait_for_shutdown(); } catch (std::exception& e) { PION_LOG_FATAL(main_log, pion::diagnostic_information(e)); } return 0; } pion-5.0.6+dfsg.orig/utils/testservices.html0000644000372000001440000000132412314121350020500 0ustar robertousers Test Website

Test Website


Demonstration of Authentication interface

pion-5.0.6+dfsg.orig/utils/piond.vcxproj0000644000372000001440000004132112314121350017616 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {2CF6432F-56EA-43AD-BCCB-C31A4DB75853} PionWebServer Win32Proj Application true Application Application Application Application true Application Application Application <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset _CONSOLE;%(PreprocessorDefinitions) %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false X64 _CONSOLE;%(PreprocessorDefinitions) ProgramDatabase %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false MachineX64 _CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false X64 _CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL %(AdditionalDependencies) ..\services\.libs;%(AdditionalLibraryDirectories) Console false MachineX64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false X64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) ProgramDatabase Console false MachineX64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false X64 _CONSOLE;PION_FULL;%(PreprocessorDefinitions) Console false MachineX64 {1cf012d8-a47c-4d2b-952d-d90d19795a07} {09c3d3d7-7ce0-48d1-994f-eb534c07cf8b} {70ca1fa9-ba9a-4ea4-9b7b-c747238991c1} {9ee2433a-b460-45e0-8968-ec5ce8ef9875} {12f95fe7-ace1-4281-86bf-4117ae2d633e} {61f4b4d5-3608-4264-9f4b-b0da3e3fdf62} false pion-5.0.6+dfsg.orig/utils/sslkey.pem0000644000372000001440000000347712314121350017117 0ustar robertousers-----BEGIN CERTIFICATE----- MIICmzCCAgSgAwIBAgIJAKwms4sSPw+/MA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlvbjEQMA4GA1UEAxMH bGlicGlvbjAeFw0wNzA2MDEwMTEzMDBaFw0wODA1MzEwMTEzMDBaMD4xCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlvbjEQMA4GA1UEAxMH bGlicGlvbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwZDYFDNhlL4P1XHL lk0WtoBViGDd5yhLCUj/vDz3GIY9sufJHMBqZNZGovOOFOWH+m3yS1NPaUqzqWvz juMkCh3NsUZHWINJWb218bzj8ExOBJ0pgRL5anw96JN5hQ4/mr4x1v+5LcVyQVYU M2KYiLDBP+QHsWbOnQvmU3Re4vcCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUg0XgzuBc fuCL2uTcHcqULKhVg3gwbgYDVR0jBGcwZYAUg0XgzuBcfuCL2uTcHcqULKhVg3ih QqRAMD4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHbGlicGlv bjEQMA4GA1UEAxMHbGlicGlvboIJAKwms4sSPw+/MAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAOOot4Yynj5Cg65+Nt5vGcIhC9321ywUnDRKEk7yu3UXA 1llqxiZE8thH0JUMoNcEWxVdEvHM8OUWaWzyyqcVZ4GyCidmE8JJUULB81b4qA+x 7rqsuTi7yLbHP3vAaZyhL0cmsxPyPB1XxQRvyAIAPWAKtJOOlQV0e055I1FyDAg= -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDBkNgUM2GUvg/VccuWTRa2gFWIYN3nKEsJSP+8PPcYhj2y58kc wGpk1kai844U5Yf6bfJLU09pSrOpa/OO4yQKHc2xRkdYg0lZvbXxvOPwTE4EnSmB EvlqfD3ok3mFDj+avjHW/7ktxXJBVhQzYpiIsME/5AexZs6dC+ZTdF7i9wIDAQAB AoGBAIUJ/LnFpugIyfE2SWuAiH/fLOqTSXE7bHdxSPQkIuEkQvvX+45bYcT00Y/m Pl12dUNWlhXXqNkBkwJ7Q+eNjpKDTTPCNo6Padg9ouHgJ5pRA9SdTTsR44UdAJpB qsuJAwYcxketfwQ5QJpZZx7slA2dl92dvo+GDGxARHKEjCQBAkEA5XzR+o/XiIjz K81aq7bw5CdD+fkm4xfEYW4Mqpbg7iM0Rt4unH+savS6ghCdJescRpa4YrVuHObh 3rx917AydwJBANftn7bHEl7juu+wQnta0GQME7ipUHB/YNsmHQzvNLARCd/aNrjk J5P6bQOzPtQ/ED6T8sB5OHbTmV43zLHmc4ECQQCT8dZE3DqtMOzjzi2oCfZef9nY 64DgYlAeJ55O05oKq/NlxJL0HXMAOOmMND27VkkSUNRp/mEQjOAMgiP2ywadAkAT eoQl4N9vX+vFI4lbx111KQG+bseq3lLGcjG8sPd3ypGxd+Xn1+0aFEUxSEIqs2Wr v3zukADf90amkTIN+lQBAkEA3pBbxrW0cYU4YfZmPqP4ABCBNedU3g1TDQbUYZ+2 MfMhjws5yzwGhqwaLJzsJOUL4wmvji/LP4gNw7l3B9qaBA== -----END RSA PRIVATE KEY----- pion-5.0.6+dfsg.orig/utils/helloserver.cpp0000644000372000001440000000443712314121350020135 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include using namespace std; using namespace pion; /// simple TCP server that just sends "Hello there!" to each connection class HelloServer : public tcp::server { public: HelloServer(const unsigned int tcp_port) : tcp::server(tcp_port) {} virtual ~HelloServer() {} virtual void handle_connection(tcp::connection_ptr& tcp_conn) { static const std::string HELLO_MESSAGE("Hello there!\x0D\x0A"); tcp_conn->set_lifecycle(pion::tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed tcp_conn->async_write(boost::asio::buffer(HELLO_MESSAGE), boost::bind(&pion::tcp::connection::finish, tcp_conn)); } }; /// main control function int main (int argc, char *argv[]) { static const unsigned int DEFAULT_PORT = 8080; // parse command line: determine port number unsigned int port = DEFAULT_PORT; if (argc == 2) { port = strtoul(argv[1], 0, 10); if (port == 0) port = DEFAULT_PORT; } else if (argc != 1) { std::cerr << "usage: helloserver [port]" << std::endl; return 1; } // initialize signal handlers, etc. process::initialize(); // initialize log system (use simple configuration) logger main_log(PION_GET_LOGGER("helloserver")); logger pion_log(PION_GET_LOGGER("pion")); PION_LOG_SETLEVEL_INFO(main_log); PION_LOG_SETLEVEL_INFO(pion_log); PION_LOG_CONFIG_BASIC; try { // create a new server to handle the Hello TCP protocol tcp::server_ptr hello_server(new HelloServer(port)); hello_server->start(); process::wait_for_shutdown(); } catch (std::exception& e) { PION_LOG_FATAL(main_log, pion::diagnostic_information(e)); } return 0; } pion-5.0.6+dfsg.orig/utils/Makefile.am0000644000372000001440000000077312314121350017132 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include bin_PROGRAMS = helloserver piond helloserver_SOURCES = helloserver.cpp helloserver_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ helloserver_DEPENDENCIES = ../src/libpion.la piond_SOURCES = piond.cpp piond_LDADD = ../src/libpion.la @PION_EXTERNAL_LIBS@ piond_DEPENDENCIES = ../src/libpion.la EXTRA_DIST = sslkey.pem testservices.html *.conf *.vcxproj *.vcxproj.filters pion-5.0.6+dfsg.orig/pion.xcodeproj/0000755000372000001440000000000012314121350016670 5ustar robertouserspion-5.0.6+dfsg.orig/pion.xcodeproj/project.pbxproj0000644000372000001440000036556212314121350021765 0ustar robertousers// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 6140E4F516111BED0052E5A0 /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; 6140E4F616111BED0052E5A0 /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; 6140E4F716111BED0052E5A0 /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; 61AECCA0161268B300BF2B16 /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; 61AECCA1161268B300BF2B16 /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; 61AECCA4161269BF00BF2B16 /* spdy_parser_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */; }; E31BC82715C1D24600168895 /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474E66162E0D99003AA5ED /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E3474E67162E0D99003AA5ED /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E3474E68162E0D99003AA5ED /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E3474E69162E0D99003AA5ED /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E3474E6A162E0D99003AA5ED /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E3474E6B162E0D99003AA5ED /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E3474E6C162E0D99003AA5ED /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E3474E6D162E0D99003AA5ED /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E3474E6E162E0D99003AA5ED /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E3474E6F162E0D99003AA5ED /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E3474E70162E0D99003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E3474E71162E0D99003AA5ED /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E3474E72162E0D99003AA5ED /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E3474E73162E0D99003AA5ED /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E3474E74162E0D99003AA5ED /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E3474E75162E0D99003AA5ED /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E3474E76162E0D99003AA5ED /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E3474E77162E0D99003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E3474E78162E0D99003AA5ED /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E3474E79162E0D99003AA5ED /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E3474E7A162E0D99003AA5ED /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E3474E7B162E0D99003AA5ED /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E3474E7C162E0D99003AA5ED /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E3474E7D162E0D99003AA5ED /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E3474E7E162E0D99003AA5ED /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E3474E7F162E0D99003AA5ED /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E3474E80162E0D99003AA5ED /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E3474E81162E0D99003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E3474E82162E0D99003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E3474E83162E0D99003AA5ED /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E3474E84162E0D99003AA5ED /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474E85162E0D99003AA5ED /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3474E86162E0D99003AA5ED /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; E3474E87162E0D99003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; E3474E88162E0D99003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; E3474E8A162E0D99003AA5ED /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E3474E8B162E0D99003AA5ED /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E3474E8C162E0D99003AA5ED /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E3474E8D162E0D99003AA5ED /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E3474E8E162E0D99003AA5ED /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E3474E8F162E0D99003AA5ED /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E3474E90162E0D99003AA5ED /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E3474E91162E0D99003AA5ED /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E3474E92162E0D99003AA5ED /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E3474E93162E0D99003AA5ED /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E3474E94162E0D99003AA5ED /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E3474E95162E0D99003AA5ED /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E3474E96162E0D99003AA5ED /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E3474E97162E0D99003AA5ED /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E3474E98162E0D99003AA5ED /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E3474E99162E0D99003AA5ED /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E3474E9A162E0D99003AA5ED /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E3474E9B162E0D99003AA5ED /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E3474E9C162E0D99003AA5ED /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; E3474E9D162E0D99003AA5ED /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; E3474EE7162E1053003AA5ED /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E3474EE8162E1053003AA5ED /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E3474EE9162E1053003AA5ED /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E3474EEA162E1053003AA5ED /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E3474EEB162E1053003AA5ED /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E3474EEC162E1053003AA5ED /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E3474EED162E1053003AA5ED /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E3474EEE162E1053003AA5ED /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E3474EEF162E1053003AA5ED /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E3474EF0162E1053003AA5ED /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E3474EF1162E1053003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E3474EF2162E1053003AA5ED /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E3474EF3162E1053003AA5ED /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E3474EF4162E1053003AA5ED /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E3474EF5162E1053003AA5ED /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E3474EF6162E1053003AA5ED /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E3474EF7162E1053003AA5ED /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E3474EF8162E1053003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E3474EF9162E1053003AA5ED /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E3474EFA162E1053003AA5ED /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E3474EFB162E1053003AA5ED /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E3474EFC162E1053003AA5ED /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E3474EFD162E1053003AA5ED /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E3474EFE162E1053003AA5ED /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E3474EFF162E1053003AA5ED /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E3474F00162E1053003AA5ED /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E3474F01162E1053003AA5ED /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E3474F02162E1053003AA5ED /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E3474F03162E1053003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E3474F04162E1053003AA5ED /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E3474F05162E1053003AA5ED /* error.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E31BC82615C1D24600168895 /* error.hpp */; }; E3474F06162E1053003AA5ED /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3474F07162E1053003AA5ED /* decompressor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F216111BED0052E5A0 /* decompressor.hpp */; }; E3474F08162E1053003AA5ED /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F316111BED0052E5A0 /* parser.hpp */; }; E3474F09162E1053003AA5ED /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6140E4F416111BED0052E5A0 /* types.hpp */; }; E3474F0B162E1053003AA5ED /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E3474F0C162E1053003AA5ED /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E3474F0D162E1053003AA5ED /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E3474F0E162E1053003AA5ED /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E3474F0F162E1053003AA5ED /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E3474F10162E1053003AA5ED /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E3474F11162E1053003AA5ED /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E3474F12162E1053003AA5ED /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E3474F13162E1053003AA5ED /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E3474F14162E1053003AA5ED /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E3474F15162E1053003AA5ED /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E3474F16162E1053003AA5ED /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E3474F17162E1053003AA5ED /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E3474F18162E1053003AA5ED /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E3474F19162E1053003AA5ED /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E3474F1A162E1053003AA5ED /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E3474F1B162E1053003AA5ED /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E3474F1C162E1053003AA5ED /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E3474F1D162E1053003AA5ED /* spdy_decompressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */; }; E3474F1E162E1053003AA5ED /* spdy_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */; }; E35CCE6315BF2D0E00D76F6C /* admin_rights.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */; }; E35CCE6415BF2D0E00D76F6C /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */; }; E35CCE6515BF2D0E00D76F6C /* config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5A15BF2D0E00D76F6C /* config.hpp */; }; E35CCE6715BF2D0E00D76F6C /* hash_map.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */; }; E35CCE6815BF2D0E00D76F6C /* logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5D15BF2D0E00D76F6C /* logger.hpp */; }; E35CCE6915BF2D0E00D76F6C /* plugin_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */; }; E35CCE6A15BF2D0E00D76F6C /* plugin.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */; }; E35CCE6B15BF2D0E00D76F6C /* process.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6015BF2D0E00D76F6C /* process.hpp */; }; E35CCE6C15BF2D0E00D76F6C /* scheduler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */; }; E35CCE7415BF2D4700D76F6C /* connection.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7015BF2D4700D76F6C /* connection.hpp */; }; E35CCE7515BF2D4700D76F6C /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7115BF2D4700D76F6C /* server.hpp */; }; E35CCE7615BF2D4700D76F6C /* stream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7215BF2D4700D76F6C /* stream.hpp */; }; E35CCE7715BF2D4700D76F6C /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7315BF2D4700D76F6C /* timer.hpp */; }; E35CCE8A15BF2D5B00D76F6C /* auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7815BF2D5B00D76F6C /* auth.hpp */; }; E35CCE8B15BF2D5B00D76F6C /* basic_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */; }; E35CCE8C15BF2D5B00D76F6C /* cookie_auth.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */; }; E35CCE8D15BF2D5B00D76F6C /* message.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7B15BF2D5B00D76F6C /* message.hpp */; }; E35CCE8E15BF2D5B00D76F6C /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7C15BF2D5B00D76F6C /* parser.hpp */; }; E35CCE8F15BF2D5B00D76F6C /* plugin_server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */; }; E35CCE9015BF2D5B00D76F6C /* plugin_service.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */; }; E35CCE9115BF2D5B00D76F6C /* reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE7F15BF2D5B00D76F6C /* reader.hpp */; }; E35CCE9215BF2D5B00D76F6C /* request_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */; }; E35CCE9315BF2D5B00D76F6C /* request_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */; }; E35CCE9415BF2D5B00D76F6C /* request.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8215BF2D5B00D76F6C /* request.hpp */; }; E35CCE9515BF2D5B00D76F6C /* response_reader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */; }; E35CCE9615BF2D5B00D76F6C /* response_writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */; }; E35CCE9715BF2D5B00D76F6C /* response.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8515BF2D5B00D76F6C /* response.hpp */; }; E35CCE9815BF2D5B00D76F6C /* server.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8615BF2D5B00D76F6C /* server.hpp */; }; E35CCE9915BF2D5B00D76F6C /* types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8715BF2D5B00D76F6C /* types.hpp */; }; E35CCE9B15BF2D5B00D76F6C /* writer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCE8915BF2D5B00D76F6C /* writer.hpp */; }; E35CCEAE15BF2D8A00D76F6C /* admin_rights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */; }; E35CCEAF15BF2D8A00D76F6C /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */; }; E35CCEB015BF2D8A00D76F6C /* http_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */; }; E35CCEB115BF2D8A00D76F6C /* http_basic_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */; }; E35CCEB215BF2D8A00D76F6C /* http_cookie_auth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */; }; E35CCEB315BF2D8A00D76F6C /* http_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA115BF2D8A00D76F6C /* http_message.cpp */; }; E35CCEB415BF2D8A00D76F6C /* http_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */; }; E35CCEB515BF2D8A00D76F6C /* http_plugin_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */; }; E35CCEB615BF2D8A00D76F6C /* http_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */; }; E35CCEB715BF2D8A00D76F6C /* http_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA515BF2D8A00D76F6C /* http_server.cpp */; }; E35CCEB815BF2D8A00D76F6C /* http_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA615BF2D8A00D76F6C /* http_types.cpp */; }; E35CCEB915BF2D8A00D76F6C /* http_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */; }; E35CCEBA15BF2D8A00D76F6C /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA815BF2D8A00D76F6C /* logger.cpp */; }; E35CCEBB15BF2D8A00D76F6C /* plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEA915BF2D8A00D76F6C /* plugin.cpp */; }; E35CCEBC15BF2D8A00D76F6C /* process.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAA15BF2D8A00D76F6C /* process.cpp */; }; E35CCEBD15BF2D8A00D76F6C /* scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */; }; E35CCEBE15BF2D8A00D76F6C /* tcp_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */; }; E35CCEBF15BF2D8A00D76F6C /* tcp_timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */; }; E35CCF2315BF2F9300D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3615BF2FBA00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3715BF2FBD00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3815BF2FC000D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3915BF2FC400D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3A15BF2FC800D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3B15BF2FCB00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3C15BF2FCE00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3D15BF2FD100D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF3E15BF2FFA00D76F6C /* hasCreateAndDestroy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */; }; E35CCF3F15BF2FFF00D76F6C /* hasCreateAndDestroy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */; }; E35CCF4015BF300600D76F6C /* hasCreateButNoDestroy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */; }; E35CCF4115BF301700D76F6C /* hasCreateButNoDestroy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */; }; E35CCF4215BF302200D76F6C /* hasNoCreate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */; }; E35CCF4315BF302300D76F6C /* hasNoCreate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */; }; E35CCF4415BF303F00D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4515BF304300D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4615BF304700D76F6C /* InterfaceStub.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */; }; E35CCF4715BF304C00D76F6C /* AllowNothingService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */; }; E35CCF4815BF304E00D76F6C /* AllowNothingService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */; }; E35CCF4915BF305100D76F6C /* CookieService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC315BF2DB500D76F6C /* CookieService.hpp */; }; E35CCF4A15BF305200D76F6C /* CookieService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC215BF2DB500D76F6C /* CookieService.cpp */; }; E35CCF4B15BF305800D76F6C /* EchoService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC415BF2DB500D76F6C /* EchoService.cpp */; }; E35CCF4C15BF305A00D76F6C /* EchoService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC515BF2DB500D76F6C /* EchoService.hpp */; }; E35CCF4D15BF305D00D76F6C /* FileService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC615BF2DB500D76F6C /* FileService.cpp */; }; E35CCF4E15BF305E00D76F6C /* FileService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC715BF2DB500D76F6C /* FileService.hpp */; }; E35CCF4F15BF306200D76F6C /* HelloService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCEC915BF2DB500D76F6C /* HelloService.hpp */; }; E35CCF5015BF306400D76F6C /* HelloService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEC815BF2DB500D76F6C /* HelloService.cpp */; }; E35CCF5115BF307100D76F6C /* LogService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E35CCECB15BF2DB500D76F6C /* LogService.hpp */; }; E35CCF5215BF307400D76F6C /* LogService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECA15BF2DB500D76F6C /* LogService.cpp */; }; E35CCF5315BF307B00D76F6C /* piond.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECD15BF2DC800D76F6C /* piond.cpp */; }; E35CCF5B15BF30A300D76F6C /* http_types_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */; }; E35CCF6715BF30AA00D76F6C /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E35CCF6D15BF30BE00D76F6C /* helloserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECC15BF2DC800D76F6C /* helloserver.cpp */; }; E3623BE517FB96DA00A14A84 /* process_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3623BE417FB96DA00A14A84 /* process_tests.cpp */; }; E36D8BF40D29D72200B4C134 /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E370CF3B158E700F00E46EE9 /* libpion.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; }; E3A00AEA15CC740A00F79569 /* user.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A00AE915CC740A00F79569 /* user.hpp */; }; E3A1AE3215C878E100FFE9E3 /* piontests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED615BF2DE500D76F6C /* piontests.cpp */; }; E3A1AE3315C87FD500FFE9E3 /* algorithm_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */; }; E3A1AE3415C87FD500FFE9E3 /* file_service_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */; }; E3A1AE3515C87FD500FFE9E3 /* http_message_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */; }; E3A1AE3615C87FD500FFE9E3 /* http_parser_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */; }; E3A1AE3715C87FD500FFE9E3 /* http_plugin_server_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */; }; E3A1AE3815C87FD500FFE9E3 /* http_request_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */; }; E3A1AE3915C87FD500FFE9E3 /* http_response_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */; }; E3A1AE3A15C87FD500FFE9E3 /* plugin_manager_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */; }; E3A1AE3B15C87FD500FFE9E3 /* plugin_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */; }; E3A1AE3C15C87FD500FFE9E3 /* tcp_server_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */; }; E3A1AE3D15C87FD500FFE9E3 /* tcp_stream_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */; }; E3B5EA9A15C896050023988F /* unit_test.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3B5EA9915C896050023988F /* unit_test.hpp */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ E35CCF2415BF2F9A00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2615BF2F9F00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2815BF2FA200D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2A15BF2FA500D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2C15BF2FA800D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF2E15BF2FAB00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3015BF2FAE00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3215BF2FB100D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF3415BF2FB300D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion: dynamic"; }; E35CCF6315BF30AA00D76F6C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; E36D8BED0D29D6F200B4C134 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; E370CE7E158D962700E46EE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = E36D8A5E0D29C9D800B4C134; remoteInfo = "pion-net: dynamic"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 6140E4F216111BED0052E5A0 /* decompressor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = decompressor.hpp; sourceTree = ""; }; 6140E4F316111BED0052E5A0 /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parser.hpp; sourceTree = ""; }; 6140E4F416111BED0052E5A0 /* types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = types.hpp; sourceTree = ""; }; 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_decompressor.cpp; path = src/spdy_decompressor.cpp; sourceTree = ""; }; 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_parser.cpp; path = src/spdy_parser.cpp; sourceTree = ""; }; 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spdy_parser_tests.cpp; path = tests/spdy_parser_tests.cpp; sourceTree = ""; }; E31BC82615C1D24600168895 /* error.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = error.hpp; path = include/pion/error.hpp; sourceTree = ""; }; E3474EA2162E0D99003AA5ED /* libpion-pic.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = "libpion-pic.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E3474F23162E1053003AA5ED /* libpion.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libpion.a; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = admin_rights.hpp; path = include/pion/admin_rights.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = algorithm.hpp; path = include/pion/algorithm.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5A15BF2D0E00D76F6C /* config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config.hpp; path = include/pion/config.hpp; sourceTree = ""; }; E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = hash_map.hpp; path = include/pion/hash_map.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5D15BF2D0E00D76F6C /* logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = logger.hpp; path = include/pion/logger.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_manager.hpp; path = include/pion/plugin_manager.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin.hpp; path = include/pion/plugin.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE6015BF2D0E00D76F6C /* process.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = process.hpp; path = include/pion/process.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = scheduler.hpp; path = include/pion/scheduler.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7015BF2D4700D76F6C /* connection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = connection.hpp; path = include/pion/tcp/connection.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7115BF2D4700D76F6C /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = server.hpp; path = include/pion/tcp/server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7215BF2D4700D76F6C /* stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stream.hpp; path = include/pion/tcp/stream.hpp; sourceTree = ""; }; E35CCE7315BF2D4700D76F6C /* timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = timer.hpp; path = include/pion/tcp/timer.hpp; sourceTree = ""; }; E35CCE7815BF2D5B00D76F6C /* auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = auth.hpp; path = include/pion/http/auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = basic_auth.hpp; path = include/pion/http/basic_auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = cookie_auth.hpp; path = include/pion/http/cookie_auth.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7B15BF2D5B00D76F6C /* message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = message.hpp; path = include/pion/http/message.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7C15BF2D5B00D76F6C /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = parser.hpp; path = include/pion/http/parser.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_server.hpp; path = include/pion/http/plugin_server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = plugin_service.hpp; path = include/pion/http/plugin_service.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE7F15BF2D5B00D76F6C /* reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = reader.hpp; path = include/pion/http/reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request_reader.hpp; path = include/pion/http/request_reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request_writer.hpp; path = include/pion/http/request_writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8215BF2D5B00D76F6C /* request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = request.hpp; path = include/pion/http/request.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response_reader.hpp; path = include/pion/http/response_reader.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response_writer.hpp; path = include/pion/http/response_writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8515BF2D5B00D76F6C /* response.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = response.hpp; path = include/pion/http/response.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8615BF2D5B00D76F6C /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = server.hpp; path = include/pion/http/server.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8715BF2D5B00D76F6C /* types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = types.hpp; path = include/pion/http/types.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE8915BF2D5B00D76F6C /* writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = writer.hpp; path = include/pion/http/writer.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = admin_rights.cpp; path = src/admin_rights.cpp; sourceTree = ""; }; E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = algorithm.cpp; path = src/algorithm.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_auth.cpp; path = src/http_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_basic_auth.cpp; path = src/http_basic_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_cookie_auth.cpp; path = src/http_cookie_auth.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA115BF2D8A00D76F6C /* http_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_message.cpp; path = src/http_message.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_parser.cpp; path = src/http_parser.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_plugin_server.cpp; path = src/http_plugin_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_reader.cpp; path = src/http_reader.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA515BF2D8A00D76F6C /* http_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_server.cpp; path = src/http_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA615BF2D8A00D76F6C /* http_types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_types.cpp; path = src/http_types.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_writer.cpp; path = src/http_writer.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA815BF2D8A00D76F6C /* logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = logger.cpp; path = src/logger.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEA915BF2D8A00D76F6C /* plugin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin.cpp; path = src/plugin.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAA15BF2D8A00D76F6C /* process.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = process.cpp; path = src/process.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = scheduler.cpp; path = src/scheduler.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_server.cpp; path = src/tcp_server.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tcp_timer.cpp; path = src/tcp_timer.cpp; sourceTree = ""; }; E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = AllowNothingService.cpp; path = services/AllowNothingService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = AllowNothingService.hpp; path = services/AllowNothingService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC215BF2DB500D76F6C /* CookieService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = CookieService.cpp; path = services/CookieService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC315BF2DB500D76F6C /* CookieService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = CookieService.hpp; path = services/CookieService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC415BF2DB500D76F6C /* EchoService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = EchoService.cpp; path = services/EchoService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC515BF2DB500D76F6C /* EchoService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = EchoService.hpp; path = services/EchoService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC615BF2DB500D76F6C /* FileService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = FileService.cpp; path = services/FileService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC715BF2DB500D76F6C /* FileService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = FileService.hpp; path = services/FileService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC815BF2DB500D76F6C /* HelloService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = HelloService.cpp; path = services/HelloService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEC915BF2DB500D76F6C /* HelloService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = HelloService.hpp; path = services/HelloService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECA15BF2DB500D76F6C /* LogService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = LogService.cpp; path = services/LogService.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECB15BF2DB500D76F6C /* LogService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = LogService.hpp; path = services/LogService.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECC15BF2DC800D76F6C /* helloserver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = helloserver.cpp; path = utils/helloserver.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECD15BF2DC800D76F6C /* piond.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = piond.cpp; path = utils/piond.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = algorithm_tests.cpp; path = tests/algorithm_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = file_service_tests.cpp; path = tests/file_service_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_message_tests.cpp; path = tests/http_message_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_parser_tests.cpp; path = tests/http_parser_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_plugin_server_tests.cpp; path = tests/http_plugin_server_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_request_tests.cpp; path = tests/http_request_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_response_tests.cpp; path = tests/http_response_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = http_types_tests.cpp; path = tests/http_types_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED615BF2DE500D76F6C /* piontests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = piontests.cpp; path = tests/piontests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin_manager_tests.cpp; path = tests/plugin_manager_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = plugin_tests.cpp; path = tests/plugin_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_server_tests.cpp; path = tests/tcp_server_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = tcp_stream_tests.cpp; path = tests/tcp_stream_tests.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasCreateAndDestroy.cpp; path = tests/plugins/hasCreateAndDestroy.cpp; sourceTree = ""; }; E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = hasCreateAndDestroy.hpp; path = tests/plugins/hasCreateAndDestroy.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasCreateButNoDestroy.cpp; path = tests/plugins/hasCreateButNoDestroy.cpp; sourceTree = ""; }; E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = hasCreateButNoDestroy.hpp; path = tests/plugins/hasCreateButNoDestroy.hpp; sourceTree = ""; }; E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hasNoCreate.cpp; path = tests/plugins/hasNoCreate.cpp; sourceTree = ""; }; E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = hasNoCreate.hpp; path = tests/plugins/hasNoCreate.hpp; sourceTree = ""; }; E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = InterfaceStub.hpp; path = tests/plugins/InterfaceStub.hpp; sourceTree = ""; }; E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = AllowNothingService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCEF215BF2EFB00D76F6C /* CookieService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = CookieService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCEFA15BF2F0800D76F6C /* EchoService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = EchoService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF0215BF2F1300D76F6C /* FileService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = FileService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF0A15BF2F1E00D76F6C /* HelloService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = HelloService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF1215BF2F2900D76F6C /* LogService.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = LogService.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasCreateAndDestroy.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasNoCreate.so; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCF6B15BF30AA00D76F6C /* helloserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = helloserver; sourceTree = BUILT_PRODUCTS_DIR; }; E35CCFB115BF3AB600D76F6C /* testservices.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testservices.conf; path = tests/config/testservices.conf; sourceTree = ""; }; E3623BE417FB96DA00A14A84 /* process_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = process_tests.cpp; path = tests/process_tests.cpp; sourceTree = ""; }; E36D8A5F0D29C9D800B4C134 /* libpion.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libpion.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; E36D8BE70D29D6DC00B4C134 /* piond */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = piond; sourceTree = BUILT_PRODUCTS_DIR; }; E370CEC0158D962700E46EE9 /* piontests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = piontests; sourceTree = BUILT_PRODUCTS_DIR; }; E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = hasCreateButNoDestroy.so; sourceTree = BUILT_PRODUCTS_DIR; }; E3A00AE915CC740A00F79569 /* user.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = user.hpp; path = include/pion/user.hpp; sourceTree = ""; }; E3B5EA9915C896050023988F /* unit_test.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = unit_test.hpp; path = include/pion/test/unit_test.hpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ E3474E9E162E0D99003AA5ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E3474F1F162E1053003AA5ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE615BF2EE100D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3815BF2FC000D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEEE15BF2EFB00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3915BF2FC400D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF615BF2F0800D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3A15BF2FC800D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFE15BF2F1300D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3B15BF2FCB00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0615BF2F1E00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3C15BF2FCE00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0E15BF2F2900D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3D15BF2FD100D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1615BF2F5700D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF2315BF2F9300D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1E15BF2F6F00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3715BF2FBD00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF6615BF30AA00D76F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF6715BF30AA00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5D0D29C9D800B4C134 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; E36D8BE50D29D6DC00B4C134 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E36D8BF40D29D72200B4C134 /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CEB8158D962700E46EE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E370CF3B158E700F00E46EE9 /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF2A158E6C1A00E46EE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3615BF2FBA00D76F6C /* libpion.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 08FB7794FE84155DC02AAC07 /* libpion */ = { isa = PBXGroup; children = ( E35CCE5315BF2CAF00D76F6C /* include */, E35CCE5415BF2CB400D76F6C /* src */, E35CCE5515BF2CB800D76F6C /* services */, E35CCE5615BF2CC000D76F6C /* utils */, E35CCE5715BF2CC600D76F6C /* tests */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = libpion; sourceTree = ""; }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( E36D8A5F0D29C9D800B4C134 /* libpion.dylib */, E36D8BE70D29D6DC00B4C134 /* piond */, E370CEC0158D962700E46EE9 /* piontests */, E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */, E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */, E35CCEF215BF2EFB00D76F6C /* CookieService.so */, E35CCEFA15BF2F0800D76F6C /* EchoService.so */, E35CCF0215BF2F1300D76F6C /* FileService.so */, E35CCF0A15BF2F1E00D76F6C /* HelloService.so */, E35CCF1215BF2F2900D76F6C /* LogService.so */, E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */, E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */, E35CCF6B15BF30AA00D76F6C /* helloserver */, E3474EA2162E0D99003AA5ED /* libpion-pic.a */, E3474F23162E1053003AA5ED /* libpion.a */, ); name = Products; sourceTree = ""; }; 6140E4F116111BED0052E5A0 /* spdy */ = { isa = PBXGroup; children = ( 6140E4F216111BED0052E5A0 /* decompressor.hpp */, 6140E4F316111BED0052E5A0 /* parser.hpp */, 6140E4F416111BED0052E5A0 /* types.hpp */, ); name = spdy; path = include/pion/spdy; sourceTree = ""; }; E35CCE5315BF2CAF00D76F6C /* include */ = { isa = PBXGroup; children = ( 6140E4F116111BED0052E5A0 /* spdy */, E35CCE6E15BF2D1300D76F6C /* tcp */, E35CCE6F15BF2D1800D76F6C /* http */, E3B5EA9715C895E00023988F /* test */, E35CCE5815BF2D0E00D76F6C /* admin_rights.hpp */, E35CCE5915BF2D0E00D76F6C /* algorithm.hpp */, E35CCE5A15BF2D0E00D76F6C /* config.hpp */, E31BC82615C1D24600168895 /* error.hpp */, E35CCE5C15BF2D0E00D76F6C /* hash_map.hpp */, E35CCE5D15BF2D0E00D76F6C /* logger.hpp */, E35CCE5F15BF2D0E00D76F6C /* plugin.hpp */, E35CCE5E15BF2D0E00D76F6C /* plugin_manager.hpp */, E35CCE6015BF2D0E00D76F6C /* process.hpp */, E35CCE6115BF2D0E00D76F6C /* scheduler.hpp */, E3A00AE915CC740A00F79569 /* user.hpp */, ); name = include; sourceTree = ""; }; E35CCE5415BF2CB400D76F6C /* src */ = { isa = PBXGroup; children = ( E35CCE9C15BF2D8A00D76F6C /* admin_rights.cpp */, E35CCE9D15BF2D8A00D76F6C /* algorithm.cpp */, E35CCE9E15BF2D8A00D76F6C /* http_auth.cpp */, E35CCE9F15BF2D8A00D76F6C /* http_basic_auth.cpp */, E35CCEA015BF2D8A00D76F6C /* http_cookie_auth.cpp */, E35CCEA115BF2D8A00D76F6C /* http_message.cpp */, E35CCEA215BF2D8A00D76F6C /* http_parser.cpp */, E35CCEA315BF2D8A00D76F6C /* http_plugin_server.cpp */, E35CCEA415BF2D8A00D76F6C /* http_reader.cpp */, E35CCEA515BF2D8A00D76F6C /* http_server.cpp */, E35CCEA615BF2D8A00D76F6C /* http_types.cpp */, E35CCEA715BF2D8A00D76F6C /* http_writer.cpp */, E35CCEA815BF2D8A00D76F6C /* logger.cpp */, E35CCEA915BF2D8A00D76F6C /* plugin.cpp */, E35CCEAA15BF2D8A00D76F6C /* process.cpp */, E35CCEAB15BF2D8A00D76F6C /* scheduler.cpp */, 61AECC9E161268B300BF2B16 /* spdy_decompressor.cpp */, 61AECC9F161268B300BF2B16 /* spdy_parser.cpp */, E35CCEAC15BF2D8A00D76F6C /* tcp_server.cpp */, E35CCEAD15BF2D8A00D76F6C /* tcp_timer.cpp */, ); name = src; sourceTree = ""; }; E35CCE5515BF2CB800D76F6C /* services */ = { isa = PBXGroup; children = ( E35CCEC015BF2DB500D76F6C /* AllowNothingService.cpp */, E35CCEC115BF2DB500D76F6C /* AllowNothingService.hpp */, E35CCEC215BF2DB500D76F6C /* CookieService.cpp */, E35CCEC315BF2DB500D76F6C /* CookieService.hpp */, E35CCEC415BF2DB500D76F6C /* EchoService.cpp */, E35CCEC515BF2DB500D76F6C /* EchoService.hpp */, E35CCEC615BF2DB500D76F6C /* FileService.cpp */, E35CCEC715BF2DB500D76F6C /* FileService.hpp */, E35CCEC815BF2DB500D76F6C /* HelloService.cpp */, E35CCEC915BF2DB500D76F6C /* HelloService.hpp */, E35CCECA15BF2DB500D76F6C /* LogService.cpp */, E35CCECB15BF2DB500D76F6C /* LogService.hpp */, ); name = services; sourceTree = ""; }; E35CCE5615BF2CC000D76F6C /* utils */ = { isa = PBXGroup; children = ( E35CCECC15BF2DC800D76F6C /* helloserver.cpp */, E35CCECD15BF2DC800D76F6C /* piond.cpp */, ); name = utils; sourceTree = ""; }; E35CCE5715BF2CC600D76F6C /* tests */ = { isa = PBXGroup; children = ( E35CCFB015BF3AAF00D76F6C /* config */, E35CCEDB15BF2E1F00D76F6C /* plugins */, E35CCECE15BF2DE500D76F6C /* algorithm_tests.cpp */, E35CCECF15BF2DE500D76F6C /* file_service_tests.cpp */, E35CCED015BF2DE500D76F6C /* http_message_tests.cpp */, E35CCED115BF2DE500D76F6C /* http_parser_tests.cpp */, E35CCED215BF2DE500D76F6C /* http_plugin_server_tests.cpp */, E35CCED315BF2DE500D76F6C /* http_request_tests.cpp */, E35CCED415BF2DE500D76F6C /* http_response_tests.cpp */, E35CCED515BF2DE500D76F6C /* http_types_tests.cpp */, E35CCED615BF2DE500D76F6C /* piontests.cpp */, E35CCED715BF2DE500D76F6C /* plugin_manager_tests.cpp */, E35CCED815BF2DE500D76F6C /* plugin_tests.cpp */, E3623BE417FB96DA00A14A84 /* process_tests.cpp */, 61AECCA21612699D00BF2B16 /* spdy_parser_tests.cpp */, E35CCED915BF2DE500D76F6C /* tcp_server_tests.cpp */, E35CCEDA15BF2DE500D76F6C /* tcp_stream_tests.cpp */, ); name = tests; sourceTree = ""; }; E35CCE6E15BF2D1300D76F6C /* tcp */ = { isa = PBXGroup; children = ( E35CCE7015BF2D4700D76F6C /* connection.hpp */, E35CCE7115BF2D4700D76F6C /* server.hpp */, E35CCE7215BF2D4700D76F6C /* stream.hpp */, E35CCE7315BF2D4700D76F6C /* timer.hpp */, ); name = tcp; sourceTree = ""; }; E35CCE6F15BF2D1800D76F6C /* http */ = { isa = PBXGroup; children = ( E35CCE7815BF2D5B00D76F6C /* auth.hpp */, E35CCE7915BF2D5B00D76F6C /* basic_auth.hpp */, E35CCE7A15BF2D5B00D76F6C /* cookie_auth.hpp */, E35CCE7B15BF2D5B00D76F6C /* message.hpp */, E35CCE7C15BF2D5B00D76F6C /* parser.hpp */, E35CCE7D15BF2D5B00D76F6C /* plugin_server.hpp */, E35CCE7E15BF2D5B00D76F6C /* plugin_service.hpp */, E35CCE7F15BF2D5B00D76F6C /* reader.hpp */, E35CCE8015BF2D5B00D76F6C /* request_reader.hpp */, E35CCE8115BF2D5B00D76F6C /* request_writer.hpp */, E35CCE8215BF2D5B00D76F6C /* request.hpp */, E35CCE8315BF2D5B00D76F6C /* response_reader.hpp */, E35CCE8415BF2D5B00D76F6C /* response_writer.hpp */, E35CCE8515BF2D5B00D76F6C /* response.hpp */, E35CCE8615BF2D5B00D76F6C /* server.hpp */, E35CCE8715BF2D5B00D76F6C /* types.hpp */, E35CCE8915BF2D5B00D76F6C /* writer.hpp */, ); name = http; sourceTree = ""; }; E35CCEDB15BF2E1F00D76F6C /* plugins */ = { isa = PBXGroup; children = ( E35CCEDC15BF2E4100D76F6C /* hasCreateAndDestroy.cpp */, E35CCEDD15BF2E4100D76F6C /* hasCreateAndDestroy.hpp */, E35CCEDE15BF2E4100D76F6C /* hasCreateButNoDestroy.cpp */, E35CCEDF15BF2E4100D76F6C /* hasCreateButNoDestroy.hpp */, E35CCEE015BF2E4100D76F6C /* hasNoCreate.cpp */, E35CCEE115BF2E4100D76F6C /* hasNoCreate.hpp */, E35CCEE215BF2E4100D76F6C /* InterfaceStub.hpp */, ); name = plugins; sourceTree = ""; }; E35CCFB015BF3AAF00D76F6C /* config */ = { isa = PBXGroup; children = ( E35CCFB115BF3AB600D76F6C /* testservices.conf */, ); name = config; sourceTree = ""; }; E3B5EA9715C895E00023988F /* test */ = { isa = PBXGroup; children = ( E3B5EA9915C896050023988F /* unit_test.hpp */, ); name = test; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ E3474E65162E0D99003AA5ED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3474E66162E0D99003AA5ED /* admin_rights.hpp in Headers */, E3474E67162E0D99003AA5ED /* algorithm.hpp in Headers */, E3474E68162E0D99003AA5ED /* config.hpp in Headers */, E3474E69162E0D99003AA5ED /* hash_map.hpp in Headers */, E3474E6A162E0D99003AA5ED /* logger.hpp in Headers */, E3474E6B162E0D99003AA5ED /* plugin_manager.hpp in Headers */, E3474E6C162E0D99003AA5ED /* plugin.hpp in Headers */, E3474E6D162E0D99003AA5ED /* process.hpp in Headers */, E3474E6E162E0D99003AA5ED /* scheduler.hpp in Headers */, E3474E6F162E0D99003AA5ED /* connection.hpp in Headers */, E3474E70162E0D99003AA5ED /* server.hpp in Headers */, E3474E71162E0D99003AA5ED /* stream.hpp in Headers */, E3474E72162E0D99003AA5ED /* timer.hpp in Headers */, E3474E73162E0D99003AA5ED /* auth.hpp in Headers */, E3474E74162E0D99003AA5ED /* basic_auth.hpp in Headers */, E3474E75162E0D99003AA5ED /* cookie_auth.hpp in Headers */, E3474E76162E0D99003AA5ED /* message.hpp in Headers */, E3474E77162E0D99003AA5ED /* parser.hpp in Headers */, E3474E78162E0D99003AA5ED /* plugin_server.hpp in Headers */, E3474E79162E0D99003AA5ED /* plugin_service.hpp in Headers */, E3474E7A162E0D99003AA5ED /* reader.hpp in Headers */, E3474E7B162E0D99003AA5ED /* request_reader.hpp in Headers */, E3474E7C162E0D99003AA5ED /* request_writer.hpp in Headers */, E3474E7D162E0D99003AA5ED /* request.hpp in Headers */, E3474E7E162E0D99003AA5ED /* response_reader.hpp in Headers */, E3474E7F162E0D99003AA5ED /* response_writer.hpp in Headers */, E3474E80162E0D99003AA5ED /* response.hpp in Headers */, E3474E81162E0D99003AA5ED /* server.hpp in Headers */, E3474E82162E0D99003AA5ED /* types.hpp in Headers */, E3474E83162E0D99003AA5ED /* writer.hpp in Headers */, E3474E84162E0D99003AA5ED /* error.hpp in Headers */, E3474E85162E0D99003AA5ED /* user.hpp in Headers */, E3474E86162E0D99003AA5ED /* decompressor.hpp in Headers */, E3474E87162E0D99003AA5ED /* parser.hpp in Headers */, E3474E88162E0D99003AA5ED /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E3474EE6162E1053003AA5ED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3474EE7162E1053003AA5ED /* admin_rights.hpp in Headers */, E3474EE8162E1053003AA5ED /* algorithm.hpp in Headers */, E3474EE9162E1053003AA5ED /* config.hpp in Headers */, E3474EEA162E1053003AA5ED /* hash_map.hpp in Headers */, E3474EEB162E1053003AA5ED /* logger.hpp in Headers */, E3474EEC162E1053003AA5ED /* plugin_manager.hpp in Headers */, E3474EED162E1053003AA5ED /* plugin.hpp in Headers */, E3474EEE162E1053003AA5ED /* process.hpp in Headers */, E3474EEF162E1053003AA5ED /* scheduler.hpp in Headers */, E3474EF0162E1053003AA5ED /* connection.hpp in Headers */, E3474EF1162E1053003AA5ED /* server.hpp in Headers */, E3474EF2162E1053003AA5ED /* stream.hpp in Headers */, E3474EF3162E1053003AA5ED /* timer.hpp in Headers */, E3474EF4162E1053003AA5ED /* auth.hpp in Headers */, E3474EF5162E1053003AA5ED /* basic_auth.hpp in Headers */, E3474EF6162E1053003AA5ED /* cookie_auth.hpp in Headers */, E3474EF7162E1053003AA5ED /* message.hpp in Headers */, E3474EF8162E1053003AA5ED /* parser.hpp in Headers */, E3474EF9162E1053003AA5ED /* plugin_server.hpp in Headers */, E3474EFA162E1053003AA5ED /* plugin_service.hpp in Headers */, E3474EFB162E1053003AA5ED /* reader.hpp in Headers */, E3474EFC162E1053003AA5ED /* request_reader.hpp in Headers */, E3474EFD162E1053003AA5ED /* request_writer.hpp in Headers */, E3474EFE162E1053003AA5ED /* request.hpp in Headers */, E3474EFF162E1053003AA5ED /* response_reader.hpp in Headers */, E3474F00162E1053003AA5ED /* response_writer.hpp in Headers */, E3474F01162E1053003AA5ED /* response.hpp in Headers */, E3474F02162E1053003AA5ED /* server.hpp in Headers */, E3474F03162E1053003AA5ED /* types.hpp in Headers */, E3474F04162E1053003AA5ED /* writer.hpp in Headers */, E3474F05162E1053003AA5ED /* error.hpp in Headers */, E3474F06162E1053003AA5ED /* user.hpp in Headers */, E3474F07162E1053003AA5ED /* decompressor.hpp in Headers */, E3474F08162E1053003AA5ED /* parser.hpp in Headers */, E3474F09162E1053003AA5ED /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE415BF2EE100D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4815BF304E00D76F6C /* AllowNothingService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEEC15BF2EFB00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4915BF305100D76F6C /* CookieService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF415BF2F0800D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4C15BF305A00D76F6C /* EchoService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFC15BF2F1300D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4E15BF305E00D76F6C /* FileService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0415BF2F1E00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4F15BF306200D76F6C /* HelloService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0C15BF2F2900D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5115BF307100D76F6C /* LogService.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1415BF2F5700D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3F15BF2FFF00D76F6C /* hasCreateAndDestroy.hpp in Headers */, E35CCF4415BF303F00D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1C15BF2F6F00D76F6C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4315BF302300D76F6C /* hasNoCreate.hpp in Headers */, E35CCF4615BF304700D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5B0D29C9D800B4C134 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCE6315BF2D0E00D76F6C /* admin_rights.hpp in Headers */, E35CCE6415BF2D0E00D76F6C /* algorithm.hpp in Headers */, E35CCE6515BF2D0E00D76F6C /* config.hpp in Headers */, E35CCE6715BF2D0E00D76F6C /* hash_map.hpp in Headers */, E35CCE6815BF2D0E00D76F6C /* logger.hpp in Headers */, E35CCE6915BF2D0E00D76F6C /* plugin_manager.hpp in Headers */, E35CCE6A15BF2D0E00D76F6C /* plugin.hpp in Headers */, E35CCE6B15BF2D0E00D76F6C /* process.hpp in Headers */, E35CCE6C15BF2D0E00D76F6C /* scheduler.hpp in Headers */, E35CCE7415BF2D4700D76F6C /* connection.hpp in Headers */, E35CCE7515BF2D4700D76F6C /* server.hpp in Headers */, E35CCE7615BF2D4700D76F6C /* stream.hpp in Headers */, E35CCE7715BF2D4700D76F6C /* timer.hpp in Headers */, E35CCE8A15BF2D5B00D76F6C /* auth.hpp in Headers */, E35CCE8B15BF2D5B00D76F6C /* basic_auth.hpp in Headers */, E35CCE8C15BF2D5B00D76F6C /* cookie_auth.hpp in Headers */, E35CCE8D15BF2D5B00D76F6C /* message.hpp in Headers */, E35CCE8E15BF2D5B00D76F6C /* parser.hpp in Headers */, E35CCE8F15BF2D5B00D76F6C /* plugin_server.hpp in Headers */, E35CCE9015BF2D5B00D76F6C /* plugin_service.hpp in Headers */, E35CCE9115BF2D5B00D76F6C /* reader.hpp in Headers */, E35CCE9215BF2D5B00D76F6C /* request_reader.hpp in Headers */, E35CCE9315BF2D5B00D76F6C /* request_writer.hpp in Headers */, E35CCE9415BF2D5B00D76F6C /* request.hpp in Headers */, E35CCE9515BF2D5B00D76F6C /* response_reader.hpp in Headers */, E35CCE9615BF2D5B00D76F6C /* response_writer.hpp in Headers */, E35CCE9715BF2D5B00D76F6C /* response.hpp in Headers */, E35CCE9815BF2D5B00D76F6C /* server.hpp in Headers */, E35CCE9915BF2D5B00D76F6C /* types.hpp in Headers */, E35CCE9B15BF2D5B00D76F6C /* writer.hpp in Headers */, E31BC82715C1D24600168895 /* error.hpp in Headers */, E3A00AEA15CC740A00F79569 /* user.hpp in Headers */, 6140E4F516111BED0052E5A0 /* decompressor.hpp in Headers */, 6140E4F616111BED0052E5A0 /* parser.hpp in Headers */, 6140E4F716111BED0052E5A0 /* types.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF13158E6BAB00E46EE9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E3B5EA9A15C896050023988F /* unit_test.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF26158E6C1A00E46EE9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4115BF301700D76F6C /* hasCreateButNoDestroy.hpp in Headers */, E35CCF4515BF304300D76F6C /* InterfaceStub.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ E3474E63162E0D99003AA5ED /* pion: static pic */ = { isa = PBXNativeTarget; buildConfigurationList = E3474E9F162E0D99003AA5ED /* Build configuration list for PBXNativeTarget "pion: static pic" */; buildPhases = ( E3474E64162E0D99003AA5ED /* ShellScript */, E3474E65162E0D99003AA5ED /* Headers */, E3474E89162E0D99003AA5ED /* Sources */, E3474E9E162E0D99003AA5ED /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: static pic"; productName = "pion-net: dynamic"; productReference = E3474EA2162E0D99003AA5ED /* libpion-pic.a */; productType = "com.apple.product-type.library.dynamic"; }; E3474EE4162E1053003AA5ED /* pion: static */ = { isa = PBXNativeTarget; buildConfigurationList = E3474F20162E1053003AA5ED /* Build configuration list for PBXNativeTarget "pion: static" */; buildPhases = ( E3474EE5162E1053003AA5ED /* ShellScript */, E3474EE6162E1053003AA5ED /* Headers */, E3474F0A162E1053003AA5ED /* Sources */, E3474F1F162E1053003AA5ED /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: static"; productName = "pion-net: dynamic"; productReference = E3474F23162E1053003AA5ED /* libpion.a */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEE315BF2EE100D76F6C /* AllowNothingService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEE715BF2EE100D76F6C /* Build configuration list for PBXNativeTarget "AllowNothingService" */; buildPhases = ( E35CCEE415BF2EE100D76F6C /* Headers */, E35CCEE515BF2EE100D76F6C /* Sources */, E35CCEE615BF2EE100D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2B15BF2FA500D76F6C /* PBXTargetDependency */, ); name = AllowNothingService; productName = ELFCodec; productReference = E35CCEEA15BF2EE100D76F6C /* AllowNothingService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEEB15BF2EFB00D76F6C /* CookieService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEEF15BF2EFB00D76F6C /* Build configuration list for PBXNativeTarget "CookieService" */; buildPhases = ( E35CCEEC15BF2EFB00D76F6C /* Headers */, E35CCEED15BF2EFB00D76F6C /* Sources */, E35CCEEE15BF2EFB00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2D15BF2FA800D76F6C /* PBXTargetDependency */, ); name = CookieService; productName = ELFCodec; productReference = E35CCEF215BF2EFB00D76F6C /* CookieService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEF315BF2F0800D76F6C /* EchoService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEF715BF2F0800D76F6C /* Build configuration list for PBXNativeTarget "EchoService" */; buildPhases = ( E35CCEF415BF2F0800D76F6C /* Headers */, E35CCEF515BF2F0800D76F6C /* Sources */, E35CCEF615BF2F0800D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2F15BF2FAB00D76F6C /* PBXTargetDependency */, ); name = EchoService; productName = ELFCodec; productReference = E35CCEFA15BF2F0800D76F6C /* EchoService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCEFB15BF2F1300D76F6C /* FileService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCEFF15BF2F1300D76F6C /* Build configuration list for PBXNativeTarget "FileService" */; buildPhases = ( E35CCEFC15BF2F1300D76F6C /* Headers */, E35CCEFD15BF2F1300D76F6C /* Sources */, E35CCEFE15BF2F1300D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3115BF2FAE00D76F6C /* PBXTargetDependency */, ); name = FileService; productName = ELFCodec; productReference = E35CCF0215BF2F1300D76F6C /* FileService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF0315BF2F1E00D76F6C /* HelloService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF0715BF2F1E00D76F6C /* Build configuration list for PBXNativeTarget "HelloService" */; buildPhases = ( E35CCF0415BF2F1E00D76F6C /* Headers */, E35CCF0515BF2F1E00D76F6C /* Sources */, E35CCF0615BF2F1E00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3315BF2FB100D76F6C /* PBXTargetDependency */, ); name = HelloService; productName = ELFCodec; productReference = E35CCF0A15BF2F1E00D76F6C /* HelloService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF0B15BF2F2900D76F6C /* LogService */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF0F15BF2F2900D76F6C /* Build configuration list for PBXNativeTarget "LogService" */; buildPhases = ( E35CCF0C15BF2F2900D76F6C /* Headers */, E35CCF0D15BF2F2900D76F6C /* Sources */, E35CCF0E15BF2F2900D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF3515BF2FB300D76F6C /* PBXTargetDependency */, ); name = LogService; productName = ELFCodec; productReference = E35CCF1215BF2F2900D76F6C /* LogService.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF1315BF2F5700D76F6C /* hasCreateAndDestroy */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF1715BF2F5700D76F6C /* Build configuration list for PBXNativeTarget "hasCreateAndDestroy" */; buildPhases = ( E35CCF1415BF2F5700D76F6C /* Headers */, E35CCF1515BF2F5700D76F6C /* Sources */, E35CCF1615BF2F5700D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2515BF2F9A00D76F6C /* PBXTargetDependency */, ); name = hasCreateAndDestroy; productName = ELFCodec; productReference = E35CCF1A15BF2F5700D76F6C /* hasCreateAndDestroy.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF1B15BF2F6F00D76F6C /* hasNoCreate */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF1F15BF2F6F00D76F6C /* Build configuration list for PBXNativeTarget "hasNoCreate" */; buildPhases = ( E35CCF1C15BF2F6F00D76F6C /* Headers */, E35CCF1D15BF2F6F00D76F6C /* Sources */, E35CCF1E15BF2F6F00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2915BF2FA200D76F6C /* PBXTargetDependency */, ); name = hasNoCreate; productName = ELFCodec; productReference = E35CCF2215BF2F6F00D76F6C /* hasNoCreate.so */; productType = "com.apple.product-type.library.dynamic"; }; E35CCF6115BF30AA00D76F6C /* helloserver */ = { isa = PBXNativeTarget; buildConfigurationList = E35CCF6815BF30AA00D76F6C /* Build configuration list for PBXNativeTarget "helloserver" */; buildPhases = ( E35CCF6415BF30AA00D76F6C /* Sources */, E35CCF6615BF30AA00D76F6C /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF6215BF30AA00D76F6C /* PBXTargetDependency */, ); name = helloserver; productName = piond; productReference = E35CCF6B15BF30AA00D76F6C /* helloserver */; productType = "com.apple.product-type.tool"; }; E36D8A5E0D29C9D800B4C134 /* pion: dynamic */ = { isa = PBXNativeTarget; buildConfigurationList = E36D8A9F0D29CB0F00B4C134 /* Build configuration list for PBXNativeTarget "pion: dynamic" */; buildPhases = ( E374024E15CEF78A00208977 /* ShellScript */, E36D8A5B0D29C9D800B4C134 /* Headers */, E36D8A5C0D29C9D800B4C134 /* Sources */, E36D8A5D0D29C9D800B4C134 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "pion: dynamic"; productName = "pion-net: dynamic"; productReference = E36D8A5F0D29C9D800B4C134 /* libpion.dylib */; productType = "com.apple.product-type.library.dynamic"; }; E36D8BE60D29D6DC00B4C134 /* piond */ = { isa = PBXNativeTarget; buildConfigurationList = E36D8C0A0D29D75C00B4C134 /* Build configuration list for PBXNativeTarget "piond" */; buildPhases = ( E36D8BE40D29D6DC00B4C134 /* Sources */, E36D8BE50D29D6DC00B4C134 /* Frameworks */, ); buildRules = ( ); dependencies = ( E36D8BEE0D29D6F200B4C134 /* PBXTargetDependency */, ); name = piond; productName = piond; productReference = E36D8BE70D29D6DC00B4C134 /* piond */; productType = "com.apple.product-type.tool"; }; E370CE78158D962700E46EE9 /* piontests */ = { isa = PBXNativeTarget; buildConfigurationList = E370CEBD158D962700E46EE9 /* Build configuration list for PBXNativeTarget "piontests" */; buildPhases = ( E370CF13158E6BAB00E46EE9 /* Headers */, E370CEA5158D962700E46EE9 /* Sources */, E370CEB8158D962700E46EE9 /* Frameworks */, ); buildRules = ( ); dependencies = ( E370CE7D158D962700E46EE9 /* PBXTargetDependency */, ); name = piontests; productName = PionReactorUnitTests; productReference = E370CEC0158D962700E46EE9 /* piontests */; productType = "com.apple.product-type.tool"; }; E370CF23158E6C1A00E46EE9 /* hasCreateButNoDestroy */ = { isa = PBXNativeTarget; buildConfigurationList = E370CF2D158E6C1A00E46EE9 /* Build configuration list for PBXNativeTarget "hasCreateButNoDestroy" */; buildPhases = ( E370CF26158E6C1A00E46EE9 /* Headers */, E370CF28158E6C1A00E46EE9 /* Sources */, E370CF2A158E6C1A00E46EE9 /* Frameworks */, ); buildRules = ( ); dependencies = ( E35CCF2715BF2F9F00D76F6C /* PBXTargetDependency */, ); name = hasCreateButNoDestroy; productName = ELFCodec; productReference = E370CF30158E6C1A00E46EE9 /* hasCreateButNoDestroy.so */; productType = "com.apple.product-type.library.dynamic"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0450; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "pion" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( en, ); mainGroup = 08FB7794FE84155DC02AAC07 /* libpion */; projectDirPath = ""; projectRoot = ""; targets = ( E36D8A5E0D29C9D800B4C134 /* pion: dynamic */, E3474EE4162E1053003AA5ED /* pion: static */, E3474E63162E0D99003AA5ED /* pion: static pic */, E35CCF1315BF2F5700D76F6C /* hasCreateAndDestroy */, E370CF23158E6C1A00E46EE9 /* hasCreateButNoDestroy */, E35CCF1B15BF2F6F00D76F6C /* hasNoCreate */, E35CCEE315BF2EE100D76F6C /* AllowNothingService */, E35CCEEB15BF2EFB00D76F6C /* CookieService */, E35CCEF315BF2F0800D76F6C /* EchoService */, E35CCEFB15BF2F1300D76F6C /* FileService */, E35CCF0315BF2F1E00D76F6C /* HelloService */, E35CCF0B15BF2F2900D76F6C /* LogService */, E35CCF6115BF30AA00D76F6C /* helloserver */, E36D8BE60D29D6DC00B4C134 /* piond */, E370CE78158D962700E46EE9 /* piontests */, ); }; /* End PBXProject section */ /* Begin PBXShellScriptBuildPhase section */ E3474E64162E0D99003AA5ED /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; E3474EE5162E1053003AA5ED /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; E374024E15CEF78A00208977 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if [ ! -f \"${PROJECT_DIR}/include/pion/config.hpp\" ]; then\n cp ${PROJECT_DIR}/include/pion/config.hpp.xcode ${PROJECT_DIR}/include/pion/config.hpp\nfi"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ E3474E89162E0D99003AA5ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3474E8A162E0D99003AA5ED /* admin_rights.cpp in Sources */, E3474E8B162E0D99003AA5ED /* algorithm.cpp in Sources */, E3474E8C162E0D99003AA5ED /* http_auth.cpp in Sources */, E3474E8D162E0D99003AA5ED /* http_basic_auth.cpp in Sources */, E3474E8E162E0D99003AA5ED /* http_cookie_auth.cpp in Sources */, E3474E8F162E0D99003AA5ED /* http_message.cpp in Sources */, E3474E90162E0D99003AA5ED /* http_parser.cpp in Sources */, E3474E91162E0D99003AA5ED /* http_plugin_server.cpp in Sources */, E3474E92162E0D99003AA5ED /* http_reader.cpp in Sources */, E3474E93162E0D99003AA5ED /* http_server.cpp in Sources */, E3474E94162E0D99003AA5ED /* http_types.cpp in Sources */, E3474E95162E0D99003AA5ED /* http_writer.cpp in Sources */, E3474E96162E0D99003AA5ED /* logger.cpp in Sources */, E3474E97162E0D99003AA5ED /* plugin.cpp in Sources */, E3474E98162E0D99003AA5ED /* process.cpp in Sources */, E3474E99162E0D99003AA5ED /* scheduler.cpp in Sources */, E3474E9A162E0D99003AA5ED /* tcp_server.cpp in Sources */, E3474E9B162E0D99003AA5ED /* tcp_timer.cpp in Sources */, E3474E9C162E0D99003AA5ED /* spdy_decompressor.cpp in Sources */, E3474E9D162E0D99003AA5ED /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E3474F0A162E1053003AA5ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3474F0B162E1053003AA5ED /* admin_rights.cpp in Sources */, E3474F0C162E1053003AA5ED /* algorithm.cpp in Sources */, E3474F0D162E1053003AA5ED /* http_auth.cpp in Sources */, E3474F0E162E1053003AA5ED /* http_basic_auth.cpp in Sources */, E3474F0F162E1053003AA5ED /* http_cookie_auth.cpp in Sources */, E3474F10162E1053003AA5ED /* http_message.cpp in Sources */, E3474F11162E1053003AA5ED /* http_parser.cpp in Sources */, E3474F12162E1053003AA5ED /* http_plugin_server.cpp in Sources */, E3474F13162E1053003AA5ED /* http_reader.cpp in Sources */, E3474F14162E1053003AA5ED /* http_server.cpp in Sources */, E3474F15162E1053003AA5ED /* http_types.cpp in Sources */, E3474F16162E1053003AA5ED /* http_writer.cpp in Sources */, E3474F17162E1053003AA5ED /* logger.cpp in Sources */, E3474F18162E1053003AA5ED /* plugin.cpp in Sources */, E3474F19162E1053003AA5ED /* process.cpp in Sources */, E3474F1A162E1053003AA5ED /* scheduler.cpp in Sources */, E3474F1B162E1053003AA5ED /* tcp_server.cpp in Sources */, E3474F1C162E1053003AA5ED /* tcp_timer.cpp in Sources */, E3474F1D162E1053003AA5ED /* spdy_decompressor.cpp in Sources */, E3474F1E162E1053003AA5ED /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEE515BF2EE100D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4715BF304C00D76F6C /* AllowNothingService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEED15BF2EFB00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4A15BF305200D76F6C /* CookieService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEF515BF2F0800D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4B15BF305800D76F6C /* EchoService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCEFD15BF2F1300D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4D15BF305D00D76F6C /* FileService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0515BF2F1E00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5015BF306400D76F6C /* HelloService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF0D15BF2F2900D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5215BF307400D76F6C /* LogService.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1515BF2F5700D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF3E15BF2FFA00D76F6C /* hasCreateAndDestroy.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF1D15BF2F6F00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4215BF302200D76F6C /* hasNoCreate.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E35CCF6415BF30AA00D76F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF6D15BF30BE00D76F6C /* helloserver.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8A5C0D29C9D800B4C134 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCEAE15BF2D8A00D76F6C /* admin_rights.cpp in Sources */, E35CCEAF15BF2D8A00D76F6C /* algorithm.cpp in Sources */, E35CCEB015BF2D8A00D76F6C /* http_auth.cpp in Sources */, E35CCEB115BF2D8A00D76F6C /* http_basic_auth.cpp in Sources */, E35CCEB215BF2D8A00D76F6C /* http_cookie_auth.cpp in Sources */, E35CCEB315BF2D8A00D76F6C /* http_message.cpp in Sources */, E35CCEB415BF2D8A00D76F6C /* http_parser.cpp in Sources */, E35CCEB515BF2D8A00D76F6C /* http_plugin_server.cpp in Sources */, E35CCEB615BF2D8A00D76F6C /* http_reader.cpp in Sources */, E35CCEB715BF2D8A00D76F6C /* http_server.cpp in Sources */, E35CCEB815BF2D8A00D76F6C /* http_types.cpp in Sources */, E35CCEB915BF2D8A00D76F6C /* http_writer.cpp in Sources */, E35CCEBA15BF2D8A00D76F6C /* logger.cpp in Sources */, E35CCEBB15BF2D8A00D76F6C /* plugin.cpp in Sources */, E35CCEBC15BF2D8A00D76F6C /* process.cpp in Sources */, E35CCEBD15BF2D8A00D76F6C /* scheduler.cpp in Sources */, E35CCEBE15BF2D8A00D76F6C /* tcp_server.cpp in Sources */, E35CCEBF15BF2D8A00D76F6C /* tcp_timer.cpp in Sources */, 61AECCA0161268B300BF2B16 /* spdy_decompressor.cpp in Sources */, 61AECCA1161268B300BF2B16 /* spdy_parser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E36D8BE40D29D6DC00B4C134 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF5315BF307B00D76F6C /* piond.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CEA5158D962700E46EE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E3A1AE3315C87FD500FFE9E3 /* algorithm_tests.cpp in Sources */, E3A1AE3415C87FD500FFE9E3 /* file_service_tests.cpp in Sources */, E3A1AE3515C87FD500FFE9E3 /* http_message_tests.cpp in Sources */, E3A1AE3615C87FD500FFE9E3 /* http_parser_tests.cpp in Sources */, E3A1AE3715C87FD500FFE9E3 /* http_plugin_server_tests.cpp in Sources */, E3A1AE3815C87FD500FFE9E3 /* http_request_tests.cpp in Sources */, E3A1AE3915C87FD500FFE9E3 /* http_response_tests.cpp in Sources */, E3A1AE3A15C87FD500FFE9E3 /* plugin_manager_tests.cpp in Sources */, E3A1AE3B15C87FD500FFE9E3 /* plugin_tests.cpp in Sources */, E3A1AE3C15C87FD500FFE9E3 /* tcp_server_tests.cpp in Sources */, E3A1AE3D15C87FD500FFE9E3 /* tcp_stream_tests.cpp in Sources */, E3A1AE3215C878E100FFE9E3 /* piontests.cpp in Sources */, E35CCF5B15BF30A300D76F6C /* http_types_tests.cpp in Sources */, 61AECCA4161269BF00BF2B16 /* spdy_parser_tests.cpp in Sources */, E3623BE517FB96DA00A14A84 /* process_tests.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; E370CF28158E6C1A00E46EE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E35CCF4015BF300600D76F6C /* hasCreateButNoDestroy.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ E35CCF2515BF2F9A00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2415BF2F9A00D76F6C /* PBXContainerItemProxy */; }; E35CCF2715BF2F9F00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2615BF2F9F00D76F6C /* PBXContainerItemProxy */; }; E35CCF2915BF2FA200D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2815BF2FA200D76F6C /* PBXContainerItemProxy */; }; E35CCF2B15BF2FA500D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2A15BF2FA500D76F6C /* PBXContainerItemProxy */; }; E35CCF2D15BF2FA800D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2C15BF2FA800D76F6C /* PBXContainerItemProxy */; }; E35CCF2F15BF2FAB00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF2E15BF2FAB00D76F6C /* PBXContainerItemProxy */; }; E35CCF3115BF2FAE00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3015BF2FAE00D76F6C /* PBXContainerItemProxy */; }; E35CCF3315BF2FB100D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3215BF2FB100D76F6C /* PBXContainerItemProxy */; }; E35CCF3515BF2FB300D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF3415BF2FB300D76F6C /* PBXContainerItemProxy */; }; E35CCF6215BF30AA00D76F6C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E35CCF6315BF30AA00D76F6C /* PBXContainerItemProxy */; }; E36D8BEE0D29D6F200B4C134 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E36D8BED0D29D6F200B4C134 /* PBXContainerItemProxy */; }; E370CE7D158D962700E46EE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E36D8A5E0D29C9D800B4C134 /* pion: dynamic */; targetProxy = E370CE7E158D962700E46EE9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1DEB923608733DC60010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; BOOST_VERSION = 1.51.0; DEP_PATH = "/Users/$(USER)/.cloudmeter"; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, PION_XCODE, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; ICU_VERSION = 49.1.2; LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)"; LOG4CPLUS_VERSION = 1.0.4.1; OBJROOT = "$(PROJECT_DIR)/bin/tmp"; OTHER_CFLAGS = ( "-fkeep-inline-functions", "-isystem", "$(DEP_PATH)/openssl-$(SSL_VERSION)/include", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-isystem", "$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/include", "-isystem", "$(DEP_PATH)/boost-$(BOOST_VERSION)/include", ); OTHER_LDFLAGS = ( "-lz", "-lbz2", ); SDKROOT = macosx10.8; SSL_VERSION = 1.0.1c; SYMROOT = "$(PROJECT_DIR)/bin"; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/include"; }; name = Debug; }; 1DEB923708733DC60010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; BOOST_VERSION = 1.51.0; DEP_PATH = "/Users/$(USER)/.cloudmeter"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OPTIMIZATION_LEVEL = 3; GCC_PREPROCESSOR_DEFINITIONS = ( _REENTRANT, PION_XCODE, NDEBUG, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; ICU_VERSION = 49.1.2; LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)"; LOG4CPLUS_VERSION = 1.0.4.1; OBJROOT = "$(PROJECT_DIR)/bin/tmp"; OTHER_CFLAGS = ( "-isystem", "$(DEP_PATH)/openssl-$(SSL_VERSION)/include", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-isystem", "$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/include", "-isystem", "$(DEP_PATH)/boost-$(BOOST_VERSION)/include", ); OTHER_LDFLAGS = ( "-lz", "-lbz2", ); SDKROOT = macosx10.8; SSL_VERSION = 1.0.1c; SYMROOT = "$(PROJECT_DIR)/bin"; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/include"; }; name = Release; }; E3474EA0162E0D99003AA5ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = "pion-pic"; }; name = Debug; }; E3474EA1162E0D99003AA5ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = "pion-pic"; }; name = Release; }; E3474F21162E1053003AA5ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = YES; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = pion; }; name = Debug; }; E3474F22162E1053003AA5ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = a; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = YES; INSTALL_PATH = /usr/local/lib; MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; PRODUCT_NAME = pion; }; name = Release; }; E35CCEE815BF2EE100D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = AllowNothingService; }; name = Debug; }; E35CCEE915BF2EE100D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = AllowNothingService; }; name = Release; }; E35CCEF015BF2EFB00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = CookieService; }; name = Debug; }; E35CCEF115BF2EFB00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = CookieService; }; name = Release; }; E35CCEF815BF2F0800D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = EchoService; }; name = Debug; }; E35CCEF915BF2F0800D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = EchoService; }; name = Release; }; E35CCF0015BF2F1300D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = FileService; }; name = Debug; }; E35CCF0115BF2F1300D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = FileService; }; name = Release; }; E35CCF0815BF2F1E00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = HelloService; }; name = Debug; }; E35CCF0915BF2F1E00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = HelloService; }; name = Release; }; E35CCF1015BF2F2900D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = LogService; }; name = Debug; }; E35CCF1115BF2F2900D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = LogService; }; name = Release; }; E35CCF1815BF2F5700D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateAndDestroy; }; name = Debug; }; E35CCF1915BF2F5700D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateAndDestroy; }; name = Release; }; E35CCF2015BF2F6F00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasNoCreate; }; name = Debug; }; E35CCF2115BF2F6F00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasNoCreate; }; name = Release; }; E35CCF6915BF30AA00D76F6C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = helloserver; }; name = Debug; }; E35CCF6A15BF30AA00D76F6C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = helloserver; }; name = Release; }; E36D8A600D29C9D900B4C134 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ( "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libssl-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libcrypto-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicudata-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicui18n-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicutu-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicuuc-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_chrono-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_date_time-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_filesystem-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_iostreams-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_regex-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_signals-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_system-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_thread-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/lib/liblog4cplus-pic.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = pion; }; name = Debug; }; E36D8A610D29C9D900B4C134 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ( "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libssl-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/openssl-$(SSL_VERSION)/lib/libcrypto-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicudata-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicui18n-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicutu-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/icu-$(ICU_VERSION)/lib/libicuuc-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_chrono-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_date_time-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_filesystem-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_iostreams-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_regex-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_signals-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_system-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_thread-pic.a", "-Wl,-force_load", "-Wl,$(DEP_PATH)/log4cplus-$(LOG4CPLUS_VERSION)/lib/liblog4cplus-pic.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = pion; }; name = Release; }; E36D8BE90D29D6DC00B4C134 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = piond; }; name = Debug; }; E36D8BEA0D29D6DC00B4C134 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = piond; }; name = Release; }; E370CEBE158D962700E46EE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; OTHER_LDFLAGS = ( "$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_unit_test_framework.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = piontests; }; name = Debug; }; E370CEBF158D962700E46EE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/bin; OTHER_LDFLAGS = ( "$(DEP_PATH)/boost-$(BOOST_VERSION)/lib/libboost_unit_test_framework.a", "$(OTHER_LDFLAGS)", ); PRODUCT_NAME = piontests; }; name = Release; }; E370CF2E158E6C1A00E46EE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateButNoDestroy; }; name = Debug; }; E370CF2F158E6C1A00E46EE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_EXTENSION = so; EXECUTABLE_PREFIX = ""; INSTALL_PATH = /usr/local/share/pion/plugins; PRODUCT_NAME = hasCreateButNoDestroy; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "pion" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB923608733DC60010E9CD /* Debug */, 1DEB923708733DC60010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E3474E9F162E0D99003AA5ED /* Build configuration list for PBXNativeTarget "pion: static pic" */ = { isa = XCConfigurationList; buildConfigurations = ( E3474EA0162E0D99003AA5ED /* Debug */, E3474EA1162E0D99003AA5ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E3474F20162E1053003AA5ED /* Build configuration list for PBXNativeTarget "pion: static" */ = { isa = XCConfigurationList; buildConfigurations = ( E3474F21162E1053003AA5ED /* Debug */, E3474F22162E1053003AA5ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEE715BF2EE100D76F6C /* Build configuration list for PBXNativeTarget "AllowNothingService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEE815BF2EE100D76F6C /* Debug */, E35CCEE915BF2EE100D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEEF15BF2EFB00D76F6C /* Build configuration list for PBXNativeTarget "CookieService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEF015BF2EFB00D76F6C /* Debug */, E35CCEF115BF2EFB00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEF715BF2F0800D76F6C /* Build configuration list for PBXNativeTarget "EchoService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCEF815BF2F0800D76F6C /* Debug */, E35CCEF915BF2F0800D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCEFF15BF2F1300D76F6C /* Build configuration list for PBXNativeTarget "FileService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF0015BF2F1300D76F6C /* Debug */, E35CCF0115BF2F1300D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF0715BF2F1E00D76F6C /* Build configuration list for PBXNativeTarget "HelloService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF0815BF2F1E00D76F6C /* Debug */, E35CCF0915BF2F1E00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF0F15BF2F2900D76F6C /* Build configuration list for PBXNativeTarget "LogService" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF1015BF2F2900D76F6C /* Debug */, E35CCF1115BF2F2900D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF1715BF2F5700D76F6C /* Build configuration list for PBXNativeTarget "hasCreateAndDestroy" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF1815BF2F5700D76F6C /* Debug */, E35CCF1915BF2F5700D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF1F15BF2F6F00D76F6C /* Build configuration list for PBXNativeTarget "hasNoCreate" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF2015BF2F6F00D76F6C /* Debug */, E35CCF2115BF2F6F00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E35CCF6815BF30AA00D76F6C /* Build configuration list for PBXNativeTarget "helloserver" */ = { isa = XCConfigurationList; buildConfigurations = ( E35CCF6915BF30AA00D76F6C /* Debug */, E35CCF6A15BF30AA00D76F6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E36D8A9F0D29CB0F00B4C134 /* Build configuration list for PBXNativeTarget "pion: dynamic" */ = { isa = XCConfigurationList; buildConfigurations = ( E36D8A600D29C9D900B4C134 /* Debug */, E36D8A610D29C9D900B4C134 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E36D8C0A0D29D75C00B4C134 /* Build configuration list for PBXNativeTarget "piond" */ = { isa = XCConfigurationList; buildConfigurations = ( E36D8BE90D29D6DC00B4C134 /* Debug */, E36D8BEA0D29D6DC00B4C134 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E370CEBD158D962700E46EE9 /* Build configuration list for PBXNativeTarget "piontests" */ = { isa = XCConfigurationList; buildConfigurations = ( E370CEBE158D962700E46EE9 /* Debug */, E370CEBF158D962700E46EE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; E370CF2D158E6C1A00E46EE9 /* Build configuration list for PBXNativeTarget "hasCreateButNoDestroy" */ = { isa = XCConfigurationList; buildConfigurations = ( E370CF2E158E6C1A00E46EE9 /* Debug */, E370CF2F158E6C1A00E46EE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; } pion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/0000755000372000001440000000000012314121350021323 5ustar robertouserspion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/0000755000372000001440000000000012314121350023305 5ustar robertouserspion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - piond server.xcscheme0000644000372000001440000001737512314121350030506 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - unit tests.xcscheme0000644000372000001440000002036412314121350030200 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - hello server.xcscheme0000644000372000001440000000610312314121350030463 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - library.xcscheme0000644000372000001440000000506312314121350027541 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/xcshareddata/xcschemes/pion - service plugins.xcscheme0000644000372000001440000001151212314121350031173 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/project.xcworkspace/0000755000372000001440000000000012314121350022666 5ustar robertouserspion-5.0.6+dfsg.orig/pion.xcodeproj/project.xcworkspace/contents.xcworkspacedata0000644000372000001440000000022512314121350027627 0ustar robertousers pion-5.0.6+dfsg.orig/pion.xcodeproj/project.xcworkspace/xcshareddata/0000755000372000001440000000000012314121350025321 5ustar robertouserspion-5.0.6+dfsg.orig/pion.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings0000644000372000001440000000041012314121350033110 0ustar robertousers IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded pion-5.0.6+dfsg.orig/autogen.sh0000755000372000001440000000045712314121350015736 0ustar robertousers#!/bin/sh # # This script initializes the GNU autotools environment for Pion # # DO NOT USE autoheader -> config.h.in file is NOT automanaged!!! AUTOHEADER=`which true` export AUTOHEADER # Make sure m4 directory exists if [ ! -d "m4" ]; then mkdir m4 fi # Generate configure script autoreconf -ifs pion-5.0.6+dfsg.orig/src/0000755000372000001440000000000012314121442014520 5ustar robertouserspion-5.0.6+dfsg.orig/src/process.cpp0000644000372000001440000001702612314121350016706 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #ifndef _MSC_VER #include #include #include #endif #include #include #include #include #include namespace pion { // begin namespace pion // static members of process boost::once_flag process::m_instance_flag = BOOST_ONCE_INIT; process::config_type *process::m_config_ptr = NULL; // process member functions void process::shutdown(void) { config_type& cfg = get_config(); boost::mutex::scoped_lock shutdown_lock(cfg.shutdown_mutex); if (! cfg.shutdown_now) { cfg.shutdown_now = true; cfg.shutdown_cond.notify_all(); } } void process::wait_for_shutdown(void) { config_type& cfg = get_config(); boost::mutex::scoped_lock shutdown_lock(cfg.shutdown_mutex); while (! cfg.shutdown_now) cfg.shutdown_cond.wait(shutdown_lock); } void process::create_config(void) { static config_type UNIQUE_PION_PROCESS_CONFIG; m_config_ptr = &UNIQUE_PION_PROCESS_CONFIG; } #ifdef _MSC_VER BOOL WINAPI console_ctrl_handler(DWORD ctrl_type) { switch(ctrl_type) { case CTRL_C_EVENT: case CTRL_BREAK_EVENT: case CTRL_CLOSE_EVENT: case CTRL_SHUTDOWN_EVENT: process::shutdown(); return TRUE; default: return FALSE; } } void process::set_dumpfile_directory(const std::string& dir) { config_type& cfg = get_config(); static const TCHAR* DBGHELP_DLL = _T("DBGHELP.DLL"); if (!dir.empty() && !boost::filesystem::is_directory(dir)) { throw dumpfile_init_exception("Dump file directory doesn't exist: " + dir); } cfg.dumpfile_dir = dir; // load dbghelp.dll if (!dir.empty()) { HMODULE hDll = NULL; TCHAR szDbgHelpPath[_MAX_PATH]; // try loading side-by-side version of DbgHelp.dll first if (GetModuleFileName(NULL, szDbgHelpPath, _MAX_PATH)) { TCHAR *pSlash = _tcsrchr(szDbgHelpPath, _T('\\')); if (pSlash) { _tcscpy(pSlash+1, DBGHELP_DLL); hDll = ::LoadLibrary( szDbgHelpPath ); } } // if not found, load the default version if (hDll == NULL) { hDll = ::LoadLibrary( DBGHELP_DLL ); } cfg.h_dbghelp = hDll; if (hDll == NULL) { throw dumpfile_init_exception("Failed to load DbgHelp.dll"); } } else { cfg.h_dbghelp = NULL; } // get MiniDumpWriteDump proc address if (cfg.h_dbghelp != NULL) { cfg.p_dump_proc = (MINIDUMPWRITEDUMP)::GetProcAddress(cfg.h_dbghelp, "MiniDumpWriteDump"); if (cfg.p_dump_proc == NULL) { throw dumpfile_init_exception("Failed to get MiniDumpWriteDump proc address, probably dbghelp.dll version is too old"); } } else { cfg.p_dump_proc = NULL; } pion::logger _logger = PION_GET_LOGGER("pion.process"); // (re)set the exception filter if (cfg.p_dump_proc) { ::SetUnhandledExceptionFilter(process::unhandled_exception_filter); PION_LOG_INFO(_logger, "Dump file generation enabled to " << cfg.dumpfile_dir ); } else { ::SetUnhandledExceptionFilter(NULL); PION_LOG_INFO(_logger, "Unhandled exception handling reset to default"); } } std::string process::generate_dumpfile_name() { config_type& cfg = get_config(); // generate file name based on current timestamp using namespace boost::posix_time; static std::locale loc(std::cout.getloc(), new time_facet("%Y%m%d_%H%M%S")); std::stringstream ss; ss.imbue(loc); ss << second_clock::universal_time() << ".dmp"; // build the full path boost::filesystem::path p(boost::filesystem::system_complete(cfg.dumpfile_dir)); p /= ss.str(); p.normalize(); # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 return p.string(); #else return p.file_string(); #endif } LONG WINAPI process::unhandled_exception_filter(struct _EXCEPTION_POINTERS *pExceptionInfo) { config_type& cfg = get_config(); pion::logger _logger = PION_GET_LOGGER("pion.process"); // make sure we have all the necessary setup if (cfg.dumpfile_dir.empty() || cfg.p_dump_proc == NULL) { PION_LOG_FATAL(_logger, "Unhandled exception caught when dump file handling not configured!"); PION_SHUTDOWN_LOGGER; return EXCEPTION_CONTINUE_SEARCH; } std::string dumpfile_path = generate_dumpfile_name(); LONG rc = EXCEPTION_CONTINUE_SEARCH; // create the dump file and, if successful, write it HANDLE hFile = ::CreateFile(dumpfile_path.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile!=INVALID_HANDLE_VALUE) { _MINIDUMP_EXCEPTION_INFORMATION ExInfo; ExInfo.ThreadId = ::GetCurrentThreadId(); ExInfo.ExceptionPointers = pExceptionInfo; ExInfo.ClientPointers = NULL; // write the dump BOOL bOK = cfg.p_dump_proc(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL ); if (bOK) { PION_LOG_INFO(_logger, "Saved process dump file to " << dumpfile_path); } else { PION_LOG_ERROR(_logger, "Failed to save dump file to " << dumpfile_path << " error code: " << GetLastError()); } ::CloseHandle(hFile); rc = EXCEPTION_EXECUTE_HANDLER; // dump saved, so we can die peacefully.. } else { PION_LOG_ERROR(_logger, "Failed to create dump file " << dumpfile_path << " error code: " << GetLastError()); } PION_LOG_FATAL(_logger, "Unhandled exception caught. The process will be terminated!"); PION_SHUTDOWN_LOGGER; return rc; } void process::initialize(void) { SetConsoleCtrlHandler(console_ctrl_handler, TRUE); } void process::daemonize(void) { // not supported } #else // NOT #ifdef _MSC_VER void handle_signal(int sig) { process::shutdown(); } void process::initialize(void) { signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGHUP, SIG_IGN); signal(SIGINT, handle_signal); signal(SIGTERM, handle_signal); } void process::daemonize(void) { // adopted from "Unix Daemon Server Programming" // http://www.enderunix.org/docs/eng/daemon.php // return early if already running as a daemon if(getppid()==1) return; // for out the process int i = fork(); if (i<0) exit(1); // error forking if (i>0) exit(0); // exit if parent // child (daemon process) continues here after the fork... // obtain a new process group setsid(); // close all descriptors for (i=getdtablesize();i>=0;--i) close(i); // bind stdio to /dev/null (ignore errors) i=open("/dev/null",O_RDWR); if (i != -1) { if (dup(i) == -1) {} if (dup(i) == -1) {} } // restrict file creation mode to 0750 umask(027); } #endif // #ifdef _MSC_VER } // end namespace pion pion-5.0.6+dfsg.orig/src/http_reader.cpp0000644000372000001440000001321312314121350017523 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // reader static members const boost::uint32_t reader::DEFAULT_READ_TIMEOUT = 10; // reader member functions void reader::receive(void) { if (m_tcp_conn->get_pipelined()) { // there are pipelined messages available in the connection's read buffer m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // default to close the connection m_tcp_conn->load_read_pos(m_read_ptr, m_read_end_ptr); consume_bytes(); } else { // no pipelined messages available in the read buffer -> read bytes from the socket m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // default to close the connection read_bytes_with_timeout(); } } void reader::consume_bytes(const boost::system::error_code& read_error, std::size_t bytes_read) { // cancel read timer if operation didn't time-out if (m_timer_ptr) { m_timer_ptr->cancel(); m_timer_ptr.reset(); } if (read_error) { // a read error occured handle_read_error(read_error); return; } PION_LOG_DEBUG(m_logger, "Read " << bytes_read << " bytes from HTTP " << (is_parsing_request() ? "request" : "response")); // set pointers for new HTTP header data to be consumed set_read_buffer(m_tcp_conn->get_read_buffer().data(), bytes_read); consume_bytes(); } void reader::consume_bytes(void) { // parse the bytes read from the last operation // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing message // true: finished successfully parsing the message // indeterminate: parsed bytes, but the message is not yet finished // boost::system::error_code ec; boost::tribool result = parse(get_message(), ec); if (gcount() > 0) { // parsed > 0 bytes in HTTP headers PION_LOG_DEBUG(m_logger, "Parsed " << gcount() << " HTTP bytes"); } if (result == true) { // finished reading HTTP message and it is valid // set the connection's lifecycle type if (get_message().check_keep_alive()) { if ( eof() ) { // the connection should be kept alive, but does not have pipelined messages m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_KEEPALIVE); } else { // the connection has pipelined messages m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_PIPELINED); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser, which will be created after the current // message has been handled m_tcp_conn->save_read_pos(m_read_ptr, m_read_end_ptr); PION_LOG_DEBUG(m_logger, "HTTP pipelined " << (is_parsing_request() ? "request (" : "response (") << bytes_available() << " bytes available)"); } } else { m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); } // we have finished parsing the HTTP message finished_reading(ec); } else if (result == false) { // the message is invalid or an error occured m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed get_message().set_is_valid(false); finished_reading(ec); } else { // not yet finished parsing the message -> read more data read_bytes_with_timeout(); } } void reader::read_bytes_with_timeout(void) { if (m_read_timeout > 0) { m_timer_ptr.reset(new tcp::timer(m_tcp_conn)); m_timer_ptr->start(m_read_timeout); } else if (m_timer_ptr) { m_timer_ptr.reset(); } read_bytes(); } void reader::handle_read_error(const boost::system::error_code& read_error) { // close the connection, forcing the client to establish a new one m_tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed // check if this is just a message with unknown content length if (! check_premature_eof(get_message())) { boost::system::error_code ec; // clear error code finished_reading(ec); return; } // only log errors if the parsing has already begun if (get_total_bytes_read() > 0) { if (read_error == boost::asio::error::operation_aborted) { // if the operation was aborted, the acceptor was stopped, // which means another thread is shutting-down the server PION_LOG_INFO(m_logger, "HTTP " << (is_parsing_request() ? "request" : "response") << " parsing aborted (shutting down)"); } else { PION_LOG_INFO(m_logger, "HTTP " << (is_parsing_request() ? "request" : "response") << " parsing aborted (" << read_error.message() << ')'); } } finished_reading(read_error); } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/spdy_decompressor.cpp0000644000372000001440000001522312314121350020771 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy // decompressor static members const char decompressor::SPDY_ZLIB_DICTIONARY[] = "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" "-agent10010120020120220320420520630030130230330430530630740040140240340440" "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" "ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran" "sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati" "oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo" "ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe" "pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic" "ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1" ".1statusversionurl"; // decompressor member functions decompressor::decompressor() : m_request_zstream(NULL), m_response_zstream(NULL) { m_request_zstream = (z_streamp)malloc(sizeof(z_stream)); BOOST_ASSERT(m_request_zstream); m_request_zstream->zalloc = Z_NULL; m_request_zstream->zfree = Z_NULL; m_request_zstream->opaque = Z_NULL; m_request_zstream->next_in = Z_NULL; m_request_zstream->next_out = Z_NULL; m_request_zstream->avail_in = 0; m_request_zstream->avail_out = 0; m_response_zstream = (z_streamp)malloc(sizeof(z_stream)); BOOST_ASSERT(m_response_zstream); m_response_zstream->zalloc = Z_NULL; m_response_zstream->zfree = Z_NULL; m_response_zstream->opaque = Z_NULL; m_response_zstream->next_in = Z_NULL; m_response_zstream->next_out = Z_NULL; m_response_zstream->avail_in = 0; m_response_zstream->avail_out = 0; int retcode = inflateInit2(m_request_zstream, MAX_WBITS); if (retcode == Z_OK) { retcode = inflateInit2(m_response_zstream, MAX_WBITS); if (retcode == Z_OK) { // Get the dictionary id m_dictionary_id = adler32(0L, Z_NULL, 0); m_dictionary_id = adler32(m_dictionary_id, (const Bytef *)SPDY_ZLIB_DICTIONARY, sizeof(SPDY_ZLIB_DICTIONARY)); } } } decompressor::~decompressor() { inflateEnd(m_request_zstream); inflateEnd(m_response_zstream); free(m_request_zstream); free(m_response_zstream); } char* decompressor::decompress(const char *compressed_data_ptr, boost::uint32_t stream_id, const spdy_control_frame_info& frame, boost::uint32_t header_block_length) { /// Get our decompressor. z_streamp decomp = NULL; if (stream_id % 2 == 0) { // Even streams are server-initiated and should never get a // client-initiated header block. Use reply decompressor. decomp = m_response_zstream; } else if (frame.type == SPDY_HEADERS) { // Odd streams are client-initiated, but may have HEADERS from either // side. Currently, no known clients send HEADERS so we assume they are // all from the server. decomp = m_response_zstream; } else if (frame.type == SPDY_SYN_STREAM) { decomp = m_request_zstream; } else if (frame.type == SPDY_SYN_REPLY) { decomp = m_response_zstream; } else { // Unhandled case. This should never happen. BOOST_ASSERT(false); } BOOST_ASSERT(decomp); // Decompress the data boost::uint32_t uncomp_length = 0; // Catch decompression failures. if (!spdy_decompress_header(compressed_data_ptr, decomp, header_block_length, uncomp_length)) { // Error in decompressing // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return NULL; } return reinterpret_cast(m_uncompressed_header); } bool decompressor::spdy_decompress_header(const char *compressed_data_ptr, z_streamp decomp, boost::uint32_t length, boost::uint32_t& uncomp_length) { int retcode; const boost::uint8_t *hptr = (boost::uint8_t *)compressed_data_ptr; decomp->next_in = (Bytef *)hptr; decomp->avail_in = length; decomp->next_out = m_uncompressed_header; decomp->avail_out = MAX_UNCOMPRESSED_DATA_BUF_SIZE; retcode = inflate(decomp, Z_SYNC_FLUSH); if (retcode == Z_NEED_DICT) { if (decomp->adler != m_dictionary_id) { // Decompressor wants a different dictionary id } else { retcode = inflateSetDictionary(decomp, (const Bytef *)SPDY_ZLIB_DICTIONARY, sizeof(SPDY_ZLIB_DICTIONARY)); if (retcode == Z_OK) { retcode = inflate(decomp, Z_SYNC_FLUSH); } } } // Handle Errors. if (retcode != Z_OK) { // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return false; } // Handle successful inflation. uncomp_length = MAX_UNCOMPRESSED_DATA_BUF_SIZE - decomp->avail_out; if (decomp->avail_in != 0) { // Error condition // This error is not catastrophic as many times we might get inconsistent // spdy header frames and we should just log error and continue. // No need to call SetError() return false; } return true; } } // end namespace spdy } // end namespace pion pion-5.0.6+dfsg.orig/src/http_plugin_server.cpp0000644000372000001440000002526412314121350021156 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // plugin_server member functions void plugin_server::add_service(const std::string& resource, http::plugin_service *service_ptr) { plugin_ptr plugin_ptr; const std::string clean_resource(strip_trailing_slash(resource)); service_ptr->set_resource(clean_resource); m_services.add(clean_resource, service_ptr); http::server::add_resource(clean_resource, boost::ref(*service_ptr)); PION_LOG_INFO(m_logger, "Loaded static web service for resource (" << clean_resource << ")"); } void plugin_server::load_service(const std::string& resource, const std::string& service_name) { const std::string clean_resource(strip_trailing_slash(resource)); http::plugin_service *service_ptr; service_ptr = m_services.load(clean_resource, service_name); http::server::add_resource(clean_resource, boost::ref(*service_ptr)); service_ptr->set_resource(clean_resource); PION_LOG_INFO(m_logger, "Loaded web service plug-in for resource (" << clean_resource << "): " << service_name); } void plugin_server::set_service_option(const std::string& resource, const std::string& name, const std::string& value) { const std::string clean_resource(strip_trailing_slash(resource)); m_services.run(clean_resource, boost::bind(&http::plugin_service::set_option, _1, name, value)); PION_LOG_INFO(m_logger, "Set web service option for resource (" << resource << "): " << name << '=' << value); } void plugin_server::load_service_config(const std::string& config_name) { std::string config_file; if (! plugin::find_config_file(config_file, config_name)) BOOST_THROW_EXCEPTION( error::file_not_found() << error::errinfo_file_name(config_name) ); // open the file for reading std::ifstream config_stream; config_stream.open(config_file.c_str(), std::ios::in); if (! config_stream.is_open()) BOOST_THROW_EXCEPTION( error::open_file() << error::errinfo_file_name(config_name) ); // parse the contents of the file http::auth_ptr my_auth_ptr; enum ParseState { PARSE_NEWLINE, PARSE_COMMAND, PARSE_RESOURCE, PARSE_VALUE, PARSE_COMMENT, PARSE_USERNAME } parse_state = PARSE_NEWLINE; std::string command_string; std::string resource_string; std::string username_string; std::string value_string; std::string option_name_string; std::string option_value_string; int c = config_stream.get(); // read the first character while (config_stream) { switch(parse_state) { case PARSE_NEWLINE: // parsing command portion (or beginning of line) if (c == '#') { // line is a comment parse_state = PARSE_COMMENT; } else if (isalpha(c)) { // first char in command parse_state = PARSE_COMMAND; // ignore case for commands command_string += tolower(c); } else if (c != '\r' && c != '\n') { // check for blank lines BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } break; case PARSE_COMMAND: // parsing command portion (or beginning of line) if (c == ' ' || c == '\t') { // command finished -> check if valid if (command_string=="path" || command_string=="auth" || command_string=="restrict") { value_string.clear(); parse_state = PARSE_VALUE; } else if (command_string=="service" || command_string=="option") { resource_string.clear(); parse_state = PARSE_RESOURCE; } else if (command_string=="user") { username_string.clear(); parse_state = PARSE_USERNAME; } else { BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } } else if (! isalpha(c)) { // commands may only contain alpha chars BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // ignore case for commands command_string += tolower(c); } break; case PARSE_RESOURCE: // parsing resource portion (/hello) if (c == ' ' || c == '\t') { // check for leading whitespace if (! resource_string.empty()) { // resource finished value_string.clear(); parse_state = PARSE_VALUE; } } else if (c == '\r' || c == '\n') { // line truncated before value BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // add char to resource resource_string += c; } break; case PARSE_USERNAME: // parsing username for user command if (c == ' ' || c == '\t') { // check for leading whitespace if (! username_string.empty()) { // username finished value_string.clear(); parse_state = PARSE_VALUE; } } else if (c == '\r' || c == '\n') { // line truncated before value (missing username) BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else { // add char to username username_string += c; } break; case PARSE_VALUE: // parsing value portion if (c == '\r' || c == '\n') { // value is finished if (value_string.empty()) { // value must not be empty BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } else if (command_string == "path") { // finished path command try { plugin::add_plugin_directory(value_string); } catch (std::exception& e) { PION_LOG_WARN(m_logger, boost::diagnostic_information(e)); } } else if (command_string == "auth") { // finished auth command user_manager_ptr user_mgr(new user_manager); if (value_string == "basic"){ my_auth_ptr.reset(new http::basic_auth(user_mgr)); } else if (value_string == "cookie"){ my_auth_ptr.reset(new http::cookie_auth(user_mgr)); } else { // only basic and cookie authentications are supported BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); } } else if (command_string == "restrict") { // finished restrict command if (! my_auth_ptr) // Authentication type must be defined before restrict BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); else if (value_string.empty()) // No service defined for restrict parameter BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); my_auth_ptr->add_restrict(value_string); } else if (command_string == "user") { // finished user command if (! my_auth_ptr) // Authentication type must be defined before users BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); else if (value_string.empty()) // No password defined for user parameter BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); my_auth_ptr->add_user(username_string, value_string); } else if (command_string == "service") { // finished service command load_service(resource_string, value_string); } else if (command_string == "option") { // finished option command std::string::size_type pos = value_string.find('='); if (pos == std::string::npos) BOOST_THROW_EXCEPTION( error::bad_config() << error::errinfo_file_name(config_name) ); option_name_string = value_string.substr(0, pos); option_value_string = value_string.substr(pos + 1); set_service_option(resource_string, option_name_string, option_value_string); } command_string.clear(); parse_state = PARSE_NEWLINE; } else if (c == ' ' || c == '\t') { // only skip leading whitespace (value may contain spaces, etc) if (! value_string.empty()) value_string += c; } else { // add char to value value_string += c; } break; case PARSE_COMMENT: // skipping comment line if (c == '\r' || c == '\n') parse_state = PARSE_NEWLINE; break; } // read the next character c = config_stream.get(); } // update authentication configuration for the server set_authentication(my_auth_ptr); } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/http_cookie_auth.cpp0000644000372000001440000002646012314121350020563 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of cookie_auth const unsigned int cookie_auth::CACHE_EXPIRATION = 3600; // 1 hour const unsigned int cookie_auth::RANDOM_COOKIE_BYTES = 20; const std::string cookie_auth::AUTH_COOKIE_NAME = "pion_session_id"; // cookie_auth member functions cookie_auth::cookie_auth(user_manager_ptr userManager, const std::string& login, const std::string& logout, const std::string& redirect) : http::auth(userManager), m_login(login), m_logout(logout), m_redirect(redirect), m_random_gen(), m_random_range(0, 255), m_random_die(m_random_gen, m_random_range), m_cache_cleanup_time(boost::posix_time::second_clock::universal_time()) { // set logger for this class set_logger(PION_GET_LOGGER("pion.http.cookie_auth")); // Seed random number generator with current time as time_t int value, cast to the required type. // (Note that boost::mt19937::result_type is boost::uint32_t, and casting to an unsigned n-bit integer is // defined by the standard to keep the lower n bits. Since ::time() returns seconds since Jan 1, 1970, // it will be a long time before we lose any entropy here, even if time_t is a 64-bit int.) m_random_gen.seed(static_cast(::time(NULL))); // generate some random numbers to increase entropy of the rng for (unsigned int n = 0; n < 100; ++n) m_random_die(); } bool cookie_auth::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { if (process_login(http_request_ptr,tcp_conn)) { return false; // we processed login/logout request, no future processing for this request permitted } if (!need_authentication(http_request_ptr)) { return true; // this request does not require authentication } // check if it is redirection page.. If yes, then do not test its credentials ( as used for login) if (!m_redirect.empty() && m_redirect==http_request_ptr->get_resource()) { return true; // this request does not require authentication } // check cache for expiration boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); expire_cache(time_now); // if we are here, we need to check if access authorized... const std::string auth_cookie(http_request_ptr->get_cookie(AUTH_COOKIE_NAME)); if (! auth_cookie.empty()) { // check if this cookie is in user cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_itr=m_user_cache.find(auth_cookie); if (user_cache_itr != m_user_cache.end()) { // we find those credential in our cache... // we can approve authorization now! http_request_ptr->set_user(user_cache_itr->second.second); // and update cache timeout user_cache_itr->second.first = time_now; return true; } } // user not found handle_unauthorized(http_request_ptr,tcp_conn); return false; } void cookie_auth::set_option(const std::string& name, const std::string& value) { if (name=="login") m_login = value; else if (name=="logout") m_logout = value; else if (name=="redirect") m_redirect = value; else BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } bool cookie_auth::process_login(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // strip off trailing slash if the request has one std::string resource(http::server::strip_trailing_slash(http_request_ptr->get_resource())); if (resource != m_login && resource != m_logout) { return false; // no login processing done } std::string redirect_url = http_request_ptr->get_query("url"); std::string new_cookie; bool delete_cookie = false; if (resource == m_login) { // process login // check username std::string username = http_request_ptr->get_query("user"); std::string password = http_request_ptr->get_query("pass"); // match username/password user_ptr user=m_user_manager->get_user(username,password); if (!user) { // authentication failed, process as in case of failed authentication... handle_unauthorized(http_request_ptr,tcp_conn); return true; } // ok we have a new user session, create a new cookie, add to cache // create random cookie std::string rand_binary; rand_binary.reserve(RANDOM_COOKIE_BYTES); for (unsigned int i=0; i(m_random_die()); } algorithm::base64_encode(rand_binary, new_cookie); // add new session to cache boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); boost::mutex::scoped_lock cache_lock(m_cache_mutex); m_user_cache.insert(std::make_pair(new_cookie,std::make_pair(time_now,user))); } else { // process logout sequence // if auth cookie presented - clean cache out const std::string auth_cookie(http_request_ptr->get_cookie(AUTH_COOKIE_NAME)); if (! auth_cookie.empty()) { boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_itr=m_user_cache.find(auth_cookie); if (user_cache_itr!=m_user_cache.end()) { m_user_cache.erase(user_cache_itr); } } // and remove cookie from browser delete_cookie = true; } // if redirect defined - send redirect if (! redirect_url.empty()) { handle_redirection(http_request_ptr,tcp_conn,redirect_url,new_cookie,delete_cookie); } else { // otherwise - OK handle_ok(http_request_ptr,tcp_conn,new_cookie,delete_cookie); } // yes, we processed login/logout somehow return true; } void cookie_auth::handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // if redirection option is used, send redirect if (!m_redirect.empty()) { handle_redirection(http_request_ptr,tcp_conn,m_redirect,"",false); return; } // authentication failed, send 401..... static const std::string CONTENT = " " "" "" "Error" "" "" "

401 Unauthorized.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_UNAUTHORIZED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_UNAUTHORIZED); writer->write_no_copy(CONTENT); writer->send(); } void cookie_auth::handle_redirection(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &redirection_url, const std::string &new_cookie, bool delete_cookie ) { // authentication failed, send 302..... static const std::string CONTENT = " " "" "" "Redirect" "" "" "

302 Found.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FOUND); writer->get_response().add_header(http::types::HEADER_LOCATION, redirection_url); // Note: use empty pass "" while setting cookies to workaround IE/FF difference // It is assumed that request url points to the root // ToDo: find a better workaround if (delete_cookie) { // remove cookie writer->get_response().delete_cookie(AUTH_COOKIE_NAME,""); } else if (!new_cookie.empty()) { // set up a new cookie writer->get_response().set_cookie(AUTH_COOKIE_NAME, new_cookie,""); } writer->write_no_copy(CONTENT); writer->send(); } void cookie_auth::handle_ok(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string &new_cookie, bool delete_cookie ) { // send 204 (No Content) response http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NO_CONTENT); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NO_CONTENT); // Note: use empty pass "" while setting cookies to workaround IE/FF difference // It is assumed that request url points to the root // ToDo: find a better workaround if (delete_cookie) { // remove cookie writer->get_response().delete_cookie(AUTH_COOKIE_NAME,""); } else if(!new_cookie.empty()) { // set up a new cookie writer->get_response().set_cookie(AUTH_COOKIE_NAME, new_cookie,""); } writer->send(); } void cookie_auth::expire_cache(const boost::posix_time::ptime &time_now) { if (time_now > m_cache_cleanup_time + boost::posix_time::seconds(CACHE_EXPIRATION)) { // expire cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator i; user_cache_type::iterator next=m_user_cache.begin(); while (next!=m_user_cache.end()) { i=next; ++next; if (time_now > i->second.first + boost::posix_time::seconds(CACHE_EXPIRATION)) { // ok - this is an old record.. expire it now m_user_cache.erase(i); } } m_cache_cleanup_time = time_now; } } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/tcp_timer.cpp0000644000372000001440000000265312314121350017216 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp // timer member functions timer::timer(tcp::connection_ptr& conn_ptr) : m_conn_ptr(conn_ptr), m_timer(conn_ptr->get_io_service()), m_timer_active(false), m_was_cancelled(false) { } void timer::start(const boost::uint32_t seconds) { boost::mutex::scoped_lock timer_lock(m_mutex); m_timer_active = true; m_timer.expires_from_now(boost::posix_time::seconds(seconds)); m_timer.async_wait(boost::bind(&timer::timer_callback, shared_from_this(), _1)); } void timer::cancel(void) { boost::mutex::scoped_lock timer_lock(m_mutex); m_was_cancelled = true; if (m_timer_active) m_timer.cancel(); } void timer::timer_callback(const boost::system::error_code& ec) { boost::mutex::scoped_lock timer_lock(m_mutex); m_timer_active = false; if (! m_was_cancelled) m_conn_ptr->cancel(); } } // end namespace tcp } // end namespace pion pion-5.0.6+dfsg.orig/src/http_writer.cpp0000644000372000001440000000623112314121350017577 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // writer member functions void writer::prepare_write_buffers(http::message::write_buffers_t& write_buffers, const bool send_final_chunk) { // check if the HTTP headers have been sent yet if (! m_sent_headers) { // initialize write buffers for send operation prepare_buffers_for_send(write_buffers); // only send the headers once m_sent_headers = true; } // combine I/O write buffers (headers and content) so that everything // can be sent together; otherwise, we would have to send headers // and content separately, which would not be as efficient // don't send anything if there is no data in content buffers if (m_content_length > 0) { if (supports_chunked_messages() && sending_chunked_message()) { // prepare the next chunk of data to send // write chunk length in hex char cast_buf[35]; sprintf(cast_buf, "%lx", static_cast(m_content_length)); // add chunk length as a string at the back of the text cache m_text_cache.push_back(cast_buf); // append length of chunk to write_buffers write_buffers.push_back(boost::asio::buffer(m_text_cache.back())); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); // append response content buffers write_buffers.insert(write_buffers.end(), m_content_buffers.begin(), m_content_buffers.end()); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); } else { // append response content buffers write_buffers.insert(write_buffers.end(), m_content_buffers.begin(), m_content_buffers.end()); } } // prepare a zero-byte (final) chunk if (send_final_chunk && supports_chunked_messages() && sending_chunked_message()) { // add chunk length as a string at the back of the text cache m_text_cache.push_back("0"); // append length of chunk to write_buffers write_buffers.push_back(boost::asio::buffer(m_text_cache.back())); // append an extra CRLF for chunk formatting write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF)); } } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/algorithm.cpp0000644000372000001440000003333212314121350017214 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include // macro to shift bitmask by a single bit #define SHIFT_BITMASK(ptr, mask) if (mask & 0x01) { mask = 0x80; ++ptr; } else mask >>= 1; namespace pion { // begin namespace pion bool algorithm::base64_decode(const std::string &input, std::string &output) { static const char nop = -1; static const char decoding_data[] = { nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop, 62, nop,nop,nop, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,nop,nop, nop,nop,nop,nop, nop, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,nop, nop,nop,nop,nop, nop,26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop, nop,nop,nop,nop }; unsigned int input_length=input.size(); const char * input_ptr = input.data(); // allocate space for output string output.clear(); output.reserve(((input_length+2)/3)*4); // for each 4-bytes sequence from the input, extract 4 6-bits sequences by droping first two bits // and regenerate into 3 8-bits sequence for (unsigned int i=0; i(input_ptr[i])]; if(base64code0==nop) // non base64 character return false; if(!(++i(input_ptr[i])]; if(base64code1==nop) // non base64 character return false; output += ((base64code0 << 2) | ((base64code1 >> 4) & 0x3)); if(++i(input_ptr[i])]; if(base64code2==nop) // non base64 character return false; output += ((base64code1 << 4) & 0xf0) | ((base64code2 >> 2) & 0x0f); } if(++i(input_ptr[i])]; if(base64code3==nop) // non base64 character return false; output += (((base64code2 << 6) & 0xc0) | base64code3 ); } } return true; } bool algorithm::base64_encode(const std::string &input, std::string &output) { static const char encoding_data[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; unsigned int input_length=input.size(); const char * input_ptr = input.data(); // allocate space for output string output.clear(); output.reserve(((input_length+2)/3)*4); // for each 3-bytes sequence from the input, extract 4 6-bits sequences and encode using // encoding_data lookup table. // if input do not contains enough chars to complete 3-byte sequence,use pad char '=' for (unsigned int i=0; i> 2) & 0x3f; // 1-byte 6 bits output += encoding_data[base64code0]; base64code1 = (input_ptr[i] << 4 ) & 0x3f; // 1-byte 2 bits + if (++i < input_length) { base64code1 |= (input_ptr[i] >> 4) & 0x0f; // 2-byte 4 bits output += encoding_data[base64code1]; base64code2 = (input_ptr[i] << 2) & 0x3f; // 2-byte 4 bits + if (++i < input_length) { base64code2 |= (input_ptr[i] >> 6) & 0x03; // 3-byte 2 bits base64code3 = input_ptr[i] & 0x3f; // 3-byte 6 bits output += encoding_data[base64code2]; output += encoding_data[base64code3]; } else { output += encoding_data[base64code2]; output += '='; } } else { output += encoding_data[base64code1]; output += '='; output += '='; } } return true; } std::string algorithm::url_decode(const std::string& str) { char decode_buf[3]; std::string result; result.reserve(str.size()); for (std::string::size_type pos = 0; pos < str.size(); ++pos) { switch(str[pos]) { case '+': // convert to space character result += ' '; break; case '%': // decode hexidecimal value if (pos + 2 < str.size()) { decode_buf[0] = str[++pos]; decode_buf[1] = str[++pos]; decode_buf[2] = '\0'; result += static_cast( strtol(decode_buf, 0, 16) ); } else { // recover from error by not decoding character result += '%'; } break; default: // character does not need to be escaped result += str[pos]; } }; return result; } std::string algorithm::url_encode(const std::string& str) { char encode_buf[4]; std::string result; encode_buf[0] = '%'; result.reserve(str.size()); // character selection for this algorithm is based on the following url: // http://www.blooberry.com/indexdot/html/topics/urlencoding.htm for (std::string::size_type pos = 0; pos < str.size(); ++pos) { switch(str[pos]) { default: if (str[pos] > 32 && str[pos] < 127) { // character does not need to be escaped result += str[pos]; break; } // else pass through to next case case ' ': case '$': case '&': case '+': case ',': case '/': case ':': case ';': case '=': case '?': case '@': case '"': case '<': case '>': case '#': case '%': case '{': case '}': case '|': case '\\': case '^': case '~': case '[': case ']': case '`': // the character needs to be encoded sprintf(encode_buf+1, "%.2X", (unsigned char)(str[pos])); result += encode_buf; break; } }; return result; } // TODO //std::string algorithm::xml_decode(const std::string& str) //{ //} std::string algorithm::xml_encode(const std::string& str) { std::string result; result.reserve(str.size() + 20); // Assume ~5 characters converted (length increases) const unsigned char *ptr = reinterpret_cast(str.c_str()); const unsigned char *end_ptr = ptr + str.size(); while (ptr < end_ptr) { // check byte ranges for valid UTF-8 // see http://en.wikipedia.org/wiki/UTF-8 // also, see http://www.w3.org/TR/REC-xml/#charsets // this implementation is the strictest subset of both if ((*ptr >= 0x20 && *ptr <= 0x7F) || *ptr == 0x9 || *ptr == 0xa || *ptr == 0xd) { // regular ASCII character switch(*ptr) { // Escape special XML characters. case '&': result += "&"; break; case '<': result += "<"; break; case '>': result += ">"; break; case '\"': result += """; break; case '\'': result += "'"; break; default: result += *ptr; } } else if (*ptr >= 0xC2 && *ptr <= 0xDF) { // two-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF) { result += *ptr; result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else if (*ptr >= 0xE0 && *ptr <= 0xEF) { // three-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF && *(ptr+2) >= 0x80 && *(ptr+2) <= 0xBF) { result += *ptr; result += *(++ptr); result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else if (*ptr >= 0xF0 && *ptr <= 0xF4) { // four-byte sequence if (*(ptr+1) >= 0x80 && *(ptr+1) <= 0xBF && *(ptr+2) >= 0x80 && *(ptr+2) <= 0xBF && *(ptr+3) >= 0x80 && *(ptr+3) <= 0xBF) { result += *ptr; result += *(++ptr); result += *(++ptr); result += *(++ptr); } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } } else { // insert replacement char result += 0xef; result += 0xbf; result += 0xbd; } ++ptr; } return result; } void algorithm::float_from_bytes(long double& value, const unsigned char *ptr, size_t num_exp_bits, size_t num_fraction_bits) { // get sign of the number from the first bit const int value_sign = (*ptr & 0x80) ? -1 : 1; // build exponent value from bitstream unsigned char mask = 0x80; boost::int16_t exponent = 0; for (size_t n = 0; n < num_exp_bits; ++n) { SHIFT_BITMASK(ptr, mask); exponent *= 2; if (*ptr & mask) exponent += 1; } // build significand from bitstream long double significand = exponent ? 1.0 : 0.0; long double significand_value = 1.0; while (num_fraction_bits) { SHIFT_BITMASK(ptr, mask); significand_value /= 2; if (*ptr & mask) significand += significand_value; --num_fraction_bits; } // calculate final value exponent -= (::pow((long double)2, (int)(num_exp_bits - 1)) - 1); value = value_sign * significand * ::pow((long double)2, exponent); } void algorithm::float_to_bytes(long double value, unsigned char *buf, size_t num_exp_bits, size_t num_fraction_bits) { // first initialize output buffer to zeros unsigned char *ptr = buf; memset(ptr, 0x00, ::ceil(static_cast(num_exp_bits + num_fraction_bits + 1) / 8)); // initialize first byte starting with sign of number if (value < 0) { *ptr = 0x80; value *= -1; } // break down numbers >= 1.0 by incrementing the exponent & dividing by 2 boost::int16_t exponent = 0; while (value >= 1) { value /= 2; ++exponent; } // skip past exponent bits because we don't know the value yet unsigned char mask = 0x40; for (size_t n = num_exp_bits; n > 0; --n) { if (n >= 8) { ++ptr; n -= 7; } else { SHIFT_BITMASK(ptr, mask); } } // serialize fractional value < 1.0 bool got_exponent = false; boost::uint16_t num_bits = 0; while (value && num_bits < num_fraction_bits) { value *= 2; if (got_exponent) { if (value >= 1.0) { *ptr |= mask; value -= 1.0; } SHIFT_BITMASK(ptr, mask); ++num_bits; } else { --exponent; if (value >= 1.0) { value -= 1.0; got_exponent = true; } } } // normalize exponent. // note: we should have a zero exponent if value == 0 boost::int32_t high_bit = ::pow((long double)2, (int)(num_exp_bits - 1)); if (got_exponent) exponent += (high_bit - 1); else exponent = 0; // serialize exponent bits ptr = buf; mask = 0x80; for (size_t n = 0; n < num_exp_bits; ++n) { SHIFT_BITMASK(ptr, mask); if (exponent >= high_bit) { *ptr |= mask; exponent -= high_bit; } high_bit /= 2; } } } // end namespace pion pion-5.0.6+dfsg.orig/src/Makefile.in0000644000372000001440000005163512314121400016571 0ustar robertousers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -------------------------------- # pion automake configuration file # -------------------------------- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/build/ax_boost_base.m4 \ $(top_srcdir)/build/ax_compiler_vendor.m4 \ $(top_srcdir)/build/ax_prog_doxygen.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/build/pion-setup.inc \ $(top_srcdir)/build/pion-boost.inc \ $(top_srcdir)/build/pion-config.inc $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/pion/config.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpion_la_DEPENDENCIES = am_libpion_la_OBJECTS = admin_rights.lo algorithm.lo logger.lo \ plugin.lo process.lo scheduler.lo spdy_decompressor.lo \ spdy_parser.lo tcp_server.lo tcp_timer.lo http_auth.lo \ http_basic_auth.lo http_cookie_auth.lo http_message.lo \ http_parser.lo http_plugin_server.lo http_reader.lo \ http_server.lo http_types.lo http_writer.lo libpion_la_OBJECTS = $(am_libpion_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libpion_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libpion_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pion depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libpion_la_SOURCES) DIST_SOURCES = $(libpion_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_HOME_DIR = @BOOST_HOME_DIR@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_LIB_EXTENSION = @BOOST_LIB_EXTENSION@ BOOST_REGEX_LIB = @BOOST_REGEX_LIB@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ BOOST_TEST_LIB = @BOOST_TEST_LIB@ BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DX_CONFIG = @DX_CONFIG@ DX_DOCDIR = @DX_DOCDIR@ DX_DOT = @DX_DOT@ DX_DOXYGEN = @DX_DOXYGEN@ DX_DVIPS = @DX_DVIPS@ DX_EGREP = @DX_EGREP@ DX_ENV = @DX_ENV@ DX_FLAG_chi = @DX_FLAG_chi@ DX_FLAG_chm = @DX_FLAG_chm@ DX_FLAG_doc = @DX_FLAG_doc@ DX_FLAG_dot = @DX_FLAG_dot@ DX_FLAG_html = @DX_FLAG_html@ DX_FLAG_man = @DX_FLAG_man@ DX_FLAG_pdf = @DX_FLAG_pdf@ DX_FLAG_ps = @DX_FLAG_ps@ DX_FLAG_rtf = @DX_FLAG_rtf@ DX_FLAG_xml = @DX_FLAG_xml@ DX_HHC = @DX_HHC@ DX_LATEX = @DX_LATEX@ DX_MAKEINDEX = @DX_MAKEINDEX@ DX_PDFLATEX = @DX_PDFLATEX@ DX_PERL = @DX_PERL@ DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PION_BZLIB = @PION_BZLIB@ PION_CYGWIN_DIRECTORY = @PION_CYGWIN_DIRECTORY@ PION_DLOPEN_LIBS = @PION_DLOPEN_LIBS@ PION_EXTERNAL_LIBS = @PION_EXTERNAL_LIBS@ PION_LIBRARY_VERSION = @PION_LIBRARY_VERSION@ PION_LOG_LIB = @PION_LOG_LIB@ PION_PLUGINS_DIRECTORY = @PION_PLUGINS_DIRECTORY@ PION_SSL_LIB = @PION_SSL_LIB@ PION_TESTS_CPPFLAGS = @PION_TESTS_CPPFLAGS@ PION_TESTS_MAKEDIRS = @PION_TESTS_MAKEDIRS@ PION_ZLIB = @PION_ZLIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I../include lib_LTLIBRARIES = libpion.la libpion_la_SOURCES = \ admin_rights.cpp algorithm.cpp logger.cpp plugin.cpp process.cpp scheduler.cpp \ spdy_decompressor.cpp spdy_parser.cpp \ tcp_server.cpp tcp_timer.cpp \ http_auth.cpp http_basic_auth.cpp http_cookie_auth.cpp http_message.cpp \ http_parser.cpp http_plugin_server.cpp http_reader.cpp http_server.cpp \ http_types.cpp http_writer.cpp libpion_la_LDFLAGS = -no-undefined -release $(PION_LIBRARY_VERSION) libpion_la_LIBADD = @PION_EXTERNAL_LIBS@ EXTRA_DIST = *.vcxproj *.vcxproj.filters all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpion.la: $(libpion_la_OBJECTS) $(libpion_la_DEPENDENCIES) $(AM_V_CXXLD)$(libpion_la_LINK) -rpath $(libdir) $(libpion_la_OBJECTS) $(libpion_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/admin_rights.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/algorithm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_basic_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_cookie_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_plugin_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scheduler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdy_decompressor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spdy_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp_timer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pion-5.0.6+dfsg.orig/src/http_types.cpp0000644000372000001440000001501512314121350017427 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // generic strings used by HTTP const std::string types::STRING_EMPTY; const std::string types::STRING_CRLF("\x0D\x0A"); const std::string types::STRING_HTTP_VERSION("HTTP/"); const std::string types::HEADER_NAME_VALUE_DELIMITER(": "); const std::string types::COOKIE_NAME_VALUE_DELIMITER("="); // common HTTP header names const std::string types::HEADER_HOST("Host"); const std::string types::HEADER_COOKIE("Cookie"); const std::string types::HEADER_SET_COOKIE("Set-Cookie"); const std::string types::HEADER_CONNECTION("Connection"); const std::string types::HEADER_CONTENT_TYPE("Content-Type"); const std::string types::HEADER_CONTENT_LENGTH("Content-Length"); const std::string types::HEADER_CONTENT_LOCATION("Content-Location"); const std::string types::HEADER_CONTENT_ENCODING("Content-Encoding"); const std::string types::HEADER_CONTENT_DISPOSITION("Content-Disposition"); const std::string types::HEADER_LAST_MODIFIED("Last-Modified"); const std::string types::HEADER_IF_MODIFIED_SINCE("If-Modified-Since"); const std::string types::HEADER_TRANSFER_ENCODING("Transfer-Encoding"); const std::string types::HEADER_LOCATION("Location"); const std::string types::HEADER_AUTHORIZATION("Authorization"); const std::string types::HEADER_REFERER("Referer"); const std::string types::HEADER_USER_AGENT("User-Agent"); const std::string types::HEADER_X_FORWARDED_FOR("X-Forwarded-For"); const std::string types::HEADER_CLIENT_IP("Client-IP"); // common HTTP content types const std::string types::CONTENT_TYPE_HTML("text/html"); const std::string types::CONTENT_TYPE_TEXT("text/plain"); const std::string types::CONTENT_TYPE_XML("text/xml"); const std::string types::CONTENT_TYPE_URLENCODED("application/x-www-form-urlencoded"); const std::string types::CONTENT_TYPE_MULTIPART_FORM_DATA("multipart/form-data"); // common HTTP request methods const std::string types::REQUEST_METHOD_HEAD("HEAD"); const std::string types::REQUEST_METHOD_GET("GET"); const std::string types::REQUEST_METHOD_PUT("PUT"); const std::string types::REQUEST_METHOD_POST("POST"); const std::string types::REQUEST_METHOD_DELETE("DELETE"); // common HTTP response messages const std::string types::RESPONSE_MESSAGE_OK("OK"); const std::string types::RESPONSE_MESSAGE_CREATED("Created"); const std::string types::RESPONSE_MESSAGE_ACCEPTED("Accepted"); const std::string types::RESPONSE_MESSAGE_NO_CONTENT("No Content"); const std::string types::RESPONSE_MESSAGE_FOUND("Found"); const std::string types::RESPONSE_MESSAGE_UNAUTHORIZED("Unauthorized"); const std::string types::RESPONSE_MESSAGE_FORBIDDEN("Forbidden"); const std::string types::RESPONSE_MESSAGE_NOT_FOUND("Not Found"); const std::string types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED("Method Not Allowed"); const std::string types::RESPONSE_MESSAGE_NOT_MODIFIED("Not Modified"); const std::string types::RESPONSE_MESSAGE_BAD_REQUEST("Bad Request"); const std::string types::RESPONSE_MESSAGE_SERVER_ERROR("Server Error"); const std::string types::RESPONSE_MESSAGE_NOT_IMPLEMENTED("Not Implemented"); const std::string types::RESPONSE_MESSAGE_CONTINUE("Continue"); // common HTTP response codes const unsigned int types::RESPONSE_CODE_OK = 200; const unsigned int types::RESPONSE_CODE_CREATED = 201; const unsigned int types::RESPONSE_CODE_ACCEPTED = 202; const unsigned int types::RESPONSE_CODE_NO_CONTENT = 204; const unsigned int types::RESPONSE_CODE_FOUND = 302; const unsigned int types::RESPONSE_CODE_UNAUTHORIZED = 401; const unsigned int types::RESPONSE_CODE_FORBIDDEN = 403; const unsigned int types::RESPONSE_CODE_NOT_FOUND = 404; const unsigned int types::RESPONSE_CODE_METHOD_NOT_ALLOWED = 405; const unsigned int types::RESPONSE_CODE_NOT_MODIFIED = 304; const unsigned int types::RESPONSE_CODE_BAD_REQUEST = 400; const unsigned int types::RESPONSE_CODE_SERVER_ERROR = 500; const unsigned int types::RESPONSE_CODE_NOT_IMPLEMENTED = 501; const unsigned int types::RESPONSE_CODE_CONTINUE = 100; // static member functions std::string types::get_date_string(const time_t t) { // use mutex since time functions are normally not thread-safe static boost::mutex time_mutex; static const char *TIME_FORMAT = "%a, %d %b %Y %H:%M:%S GMT"; static const unsigned int TIME_BUF_SIZE = 100; char time_buf[TIME_BUF_SIZE+1]; boost::mutex::scoped_lock time_lock(time_mutex); if (strftime(time_buf, TIME_BUF_SIZE, TIME_FORMAT, gmtime(&t)) == 0) time_buf[0] = '\0'; // failed; resulting buffer is indeterminate time_lock.unlock(); return std::string(time_buf); } std::string types::make_query_string(const ihash_multimap& query_params) { std::string query_string; for (ihash_multimap::const_iterator i = query_params.begin(); i != query_params.end(); ++i) { if (i != query_params.begin()) query_string += '&'; query_string += algorithm::url_encode(i->first); query_string += '='; query_string += algorithm::url_encode(i->second); } return query_string; } std::string types::make_set_cookie_header(const std::string& name, const std::string& value, const std::string& path, const bool has_max_age, const unsigned long max_age) { // note: according to RFC6265, attributes should not be quoted std::string set_cookie_header(name); set_cookie_header += "=\""; set_cookie_header += value; set_cookie_header += "\"; Version=1"; if (! path.empty()) { set_cookie_header += "; Path="; set_cookie_header += path; } if (has_max_age) { set_cookie_header += "; Max-Age="; set_cookie_header += boost::lexical_cast(max_age); } return set_cookie_header; } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/http_message.cpp0000644000372000001440000002066012314121350017711 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of message const boost::regex message::REGEX_ICASE_CHUNKED(".*chunked.*", boost::regex::icase); // message member functions std::size_t message::send(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only) { // initialize write buffers for send operation using HTTP headers write_buffers_t write_buffers; prepare_buffers_for_send(write_buffers, tcp_conn.get_keep_alive(), false); // append payload content to write buffers (if there is any) if (!headers_only && get_content_length() > 0 && get_content() != NULL) write_buffers.push_back(boost::asio::buffer(get_content(), get_content_length())); // send the message and return the result return tcp_conn.write(write_buffers, ec); } std::size_t message::receive(tcp::connection& tcp_conn, boost::system::error_code& ec, parser& http_parser) { std::size_t last_bytes_read = 0; // make sure that we start out with an empty message clear(); if (tcp_conn.get_pipelined()) { // there are pipelined messages available in the connection's read buffer const char *read_ptr; const char *read_end_ptr; tcp_conn.load_read_pos(read_ptr, read_end_ptr); last_bytes_read = (read_end_ptr - read_ptr); http_parser.set_read_buffer(read_ptr, last_bytes_read); } else { // read buffer is empty (not pipelined) -> read some bytes from the connection last_bytes_read = tcp_conn.read_some(ec); if (ec) return 0; BOOST_ASSERT(last_bytes_read > 0); http_parser.set_read_buffer(tcp_conn.get_read_buffer().data(), last_bytes_read); } // incrementally read and parse bytes from the connection bool force_connection_closed = false; boost::tribool parse_result; while (true) { // parse bytes available in the read buffer parse_result = http_parser.parse(*this, ec); if (! boost::indeterminate(parse_result)) break; // read more bytes from the connection last_bytes_read = tcp_conn.read_some(ec); if (ec || last_bytes_read == 0) { if (http_parser.check_premature_eof(*this)) { // premature EOF encountered if (! ec) ec = make_error_code(boost::system::errc::io_error); return http_parser.get_total_bytes_read(); } else { // EOF reached when content length unknown // assume it is the correct end of content // and everything is OK force_connection_closed = true; parse_result = true; ec.clear(); break; } break; } // update the HTTP parser's read buffer http_parser.set_read_buffer(tcp_conn.get_read_buffer().data(), last_bytes_read); } if (parse_result == false) { // an error occurred while parsing the message headers return http_parser.get_total_bytes_read(); } // set the connection's lifecycle type if (!force_connection_closed && check_keep_alive()) { if ( http_parser.eof() ) { // the connection should be kept alive, but does not have pipelined messages tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_KEEPALIVE); } else { // the connection has pipelined messages tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_PIPELINED); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser, which will be created after the current // message has been handled const char *read_ptr; const char *read_end_ptr; http_parser.load_read_pos(read_ptr, read_end_ptr); tcp_conn.save_read_pos(read_ptr, read_end_ptr); } } else { // default to close the connection tcp_conn.set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // save the read position as a bookmark so that it can be retrieved // by a new HTTP parser if (http_parser.get_parse_headers_only()) { const char *read_ptr; const char *read_end_ptr; http_parser.load_read_pos(read_ptr, read_end_ptr); tcp_conn.save_read_pos(read_ptr, read_end_ptr); } } return (http_parser.get_total_bytes_read()); } std::size_t message::receive(tcp::connection& tcp_conn, boost::system::error_code& ec, bool headers_only, std::size_t max_content_length) { http::parser http_parser(dynamic_cast(this) != NULL); http_parser.parse_headers_only(headers_only); http_parser.set_max_content_length(max_content_length); return receive(tcp_conn, ec, http_parser); } std::size_t message::write(std::ostream& out, boost::system::error_code& ec, bool headers_only) { // reset error_code ec.clear(); // initialize write buffers for send operation using HTTP headers write_buffers_t write_buffers; prepare_buffers_for_send(write_buffers, true, false); // append payload content to write buffers (if there is any) if (!headers_only && get_content_length() > 0 && get_content() != NULL) write_buffers.push_back(boost::asio::buffer(get_content(), get_content_length())); // write message to the output stream std::size_t bytes_out = 0; for (write_buffers_t::const_iterator i=write_buffers.begin(); i!=write_buffers.end(); ++i) { const char *ptr = boost::asio::buffer_cast(*i); size_t len = boost::asio::buffer_size(*i); out.write(ptr, len); bytes_out += len; } return bytes_out; } std::size_t message::read(std::istream& in, boost::system::error_code& ec, parser& http_parser) { // make sure that we start out with an empty message & clear error_code clear(); ec.clear(); // parse data from file one byte at a time boost::tribool parse_result; char c; while (in) { in.read(&c, 1); if ( ! in ) { ec = make_error_code(boost::system::errc::io_error); break; } http_parser.set_read_buffer(&c, 1); parse_result = http_parser.parse(*this, ec); if (! boost::indeterminate(parse_result)) break; } if (boost::indeterminate(parse_result)) { if (http_parser.check_premature_eof(*this)) { // premature EOF encountered if (! ec) ec = make_error_code(boost::system::errc::io_error); } else { // EOF reached when content length unknown // assume it is the correct end of content // and everything is OK parse_result = true; ec.clear(); } } return (http_parser.get_total_bytes_read()); } std::size_t message::read(std::istream& in, boost::system::error_code& ec, bool headers_only, std::size_t max_content_length) { http::parser http_parser(dynamic_cast(this) != NULL); http_parser.parse_headers_only(headers_only); http_parser.set_max_content_length(max_content_length); return read(in, ec, http_parser); } void message::concatenate_chunks(void) { set_content_length(m_chunk_cache.size()); char *post_buffer = create_content_buffer(); if (m_chunk_cache.size() > 0) std::copy(m_chunk_cache.begin(), m_chunk_cache.end(), post_buffer); } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/pion.vcxproj.filters0000644000372000001440000001344412314121350020555 0ustar robertousers {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files Header Files pion-5.0.6+dfsg.orig/src/tcp_server.cpp0000644000372000001440000002535512314121350017410 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include namespace pion { // begin namespace pion namespace tcp { // begin namespace tcp // tcp::server member functions server::server(scheduler& sched, const unsigned int tcp_port) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_active_scheduler(sched), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(boost::asio::ip::tcp::v4(), tcp_port), m_ssl_flag(false), m_is_listening(false) {} server::server(scheduler& sched, const boost::asio::ip::tcp::endpoint& endpoint) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_active_scheduler(sched), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(endpoint), m_ssl_flag(false), m_is_listening(false) {} server::server(const unsigned int tcp_port) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_default_scheduler(), m_active_scheduler(m_default_scheduler), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(boost::asio::ip::tcp::v4(), tcp_port), m_ssl_flag(false), m_is_listening(false) {} server::server(const boost::asio::ip::tcp::endpoint& endpoint) : m_logger(PION_GET_LOGGER("pion.tcp.server")), m_default_scheduler(), m_active_scheduler(m_default_scheduler), m_tcp_acceptor(m_active_scheduler.get_io_service()), #ifdef PION_HAVE_SSL m_ssl_context(m_active_scheduler.get_io_service(), boost::asio::ssl::context::sslv23), #else m_ssl_context(0), #endif m_endpoint(endpoint), m_ssl_flag(false), m_is_listening(false) {} void server::start(void) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (! m_is_listening) { PION_LOG_INFO(m_logger, "Starting server on port " << get_port()); before_starting(); // configure the acceptor service try { // get admin permissions in case we're binding to a privileged port pion::admin_rights use_admin_rights(get_port() > 0 && get_port() < 1024); m_tcp_acceptor.open(m_endpoint.protocol()); // allow the acceptor to reuse the address (i.e. SO_REUSEADDR) // ...except when running not on Windows - see http://msdn.microsoft.com/en-us/library/ms740621%28VS.85%29.aspx #ifndef _MSC_VER m_tcp_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); #endif m_tcp_acceptor.bind(m_endpoint); if (m_endpoint.port() == 0) { // update the endpoint to reflect the port chosen by bind m_endpoint = m_tcp_acceptor.local_endpoint(); } m_tcp_acceptor.listen(); } catch (std::exception& e) { PION_LOG_ERROR(m_logger, "Unable to bind to port " << get_port() << ": " << e.what()); throw; } m_is_listening = true; // unlock the mutex since listen() requires its own lock server_lock.unlock(); listen(); // notify the thread scheduler that we need it now m_active_scheduler.add_active_user(); } } void server::stop(bool wait_until_finished) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening) { PION_LOG_INFO(m_logger, "Shutting down server on port " << get_port()); m_is_listening = false; // this terminates any connections waiting to be accepted m_tcp_acceptor.close(); if (! wait_until_finished) { // this terminates any other open connections std::for_each(m_conn_pool.begin(), m_conn_pool.end(), boost::bind(&connection::close, _1)); } // wait for all pending connections to complete while (! m_conn_pool.empty()) { // try to prun connections that didn't finish cleanly if (prune_connections() == 0) break; // if no more left, then we can stop waiting // sleep for up to a quarter second to give open connections a chance to finish PION_LOG_INFO(m_logger, "Waiting for open connections to finish"); scheduler::sleep(m_no_more_connections, server_lock, 0, 250000000); } // notify the thread scheduler that we no longer need it m_active_scheduler.remove_active_user(); // all done! after_stopping(); m_server_has_stopped.notify_all(); } } void server::join(void) { boost::mutex::scoped_lock server_lock(m_mutex); while (m_is_listening) { // sleep until server_has_stopped condition is signaled m_server_has_stopped.wait(server_lock); } } void server::set_ssl_key_file(const std::string& pem_key_file) { // configure server for SSL set_ssl_flag(true); #ifdef PION_HAVE_SSL m_ssl_context.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::single_dh_use); m_ssl_context.use_certificate_file(pem_key_file, boost::asio::ssl::context::pem); m_ssl_context.use_private_key_file(pem_key_file, boost::asio::ssl::context::pem); #endif } void server::listen(void) { // lock mutex for thread safety boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening) { // create a new TCP connection object tcp::connection_ptr new_connection(connection::create(get_io_service(), m_ssl_context, m_ssl_flag, boost::bind(&server::finish_connection, this, _1))); // prune connections that finished uncleanly prune_connections(); // keep track of the object in the server's connection pool m_conn_pool.insert(new_connection); // use the object to accept a new connection new_connection->async_accept(m_tcp_acceptor, boost::bind(&server::handle_accept, this, new_connection, boost::asio::placeholders::error)); } } void server::handle_accept(tcp::connection_ptr& tcp_conn, const boost::system::error_code& accept_error) { if (accept_error) { // an error occured while trying to a accept a new connection // this happens when the server is being shut down if (m_is_listening) { listen(); // schedule acceptance of another connection PION_LOG_WARN(m_logger, "Accept error on port " << get_port() << ": " << accept_error.message()); } finish_connection(tcp_conn); } else { // got a new TCP connection PION_LOG_DEBUG(m_logger, "New" << (tcp_conn->get_ssl_flag() ? " SSL " : " ") << "connection on port " << get_port()); // schedule the acceptance of another new connection // (this returns immediately since it schedules it as an event) if (m_is_listening) listen(); // handle the new connection #ifdef PION_HAVE_SSL if (tcp_conn->get_ssl_flag()) { tcp_conn->async_handshake_server(boost::bind(&server::handle_ssl_handshake, this, tcp_conn, boost::asio::placeholders::error)); } else #endif // not SSL -> call the handler immediately handle_connection(tcp_conn); } } void server::handle_ssl_handshake(tcp::connection_ptr& tcp_conn, const boost::system::error_code& handshake_error) { if (handshake_error) { // an error occured while trying to establish the SSL connection PION_LOG_WARN(m_logger, "SSL handshake failed on port " << get_port() << " (" << handshake_error.message() << ')'); finish_connection(tcp_conn); } else { // handle the new connection PION_LOG_DEBUG(m_logger, "SSL handshake succeeded on port " << get_port()); handle_connection(tcp_conn); } } void server::finish_connection(tcp::connection_ptr& tcp_conn) { boost::mutex::scoped_lock server_lock(m_mutex); if (m_is_listening && tcp_conn->get_keep_alive()) { // keep the connection alive handle_connection(tcp_conn); } else { PION_LOG_DEBUG(m_logger, "Closing connection on port " << get_port()); // remove the connection from the server's management pool ConnectionPool::iterator conn_itr = m_conn_pool.find(tcp_conn); if (conn_itr != m_conn_pool.end()) m_conn_pool.erase(conn_itr); // trigger the no more connections condition if we're waiting to stop if (!m_is_listening && m_conn_pool.empty()) m_no_more_connections.notify_all(); } } std::size_t server::prune_connections(void) { // assumes that a server lock has already been acquired ConnectionPool::iterator conn_itr = m_conn_pool.begin(); while (conn_itr != m_conn_pool.end()) { if (conn_itr->unique()) { PION_LOG_WARN(m_logger, "Closing orphaned connection on port " << get_port()); ConnectionPool::iterator erase_itr = conn_itr; ++conn_itr; (*erase_itr)->close(); m_conn_pool.erase(erase_itr); } else { ++conn_itr; } } // return the number of connections remaining return m_conn_pool.size(); } std::size_t server::get_connections(void) const { boost::mutex::scoped_lock server_lock(m_mutex); return (m_is_listening ? (m_conn_pool.size() - 1) : m_conn_pool.size()); } } // end namespace tcp } // end namespace pion pion-5.0.6+dfsg.orig/src/logger.cpp0000644000372000001440000000122212314121350016476 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include namespace pion { // begin namespace pion // static members of logger #if defined(PION_USE_OSTREAM_LOGGING) logger::log_priority_type logger::m_priority = logger::LOG_LEVEL_INFO; #endif } // end namespace pion pion-5.0.6+dfsg.orig/src/http_server.cpp0000644000372000001440000003342112314121350017572 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of server const unsigned int server::MAX_REDIRECTS = 10; // server member functions void server::handle_connection(tcp::connection_ptr& tcp_conn) { request_reader_ptr my_reader_ptr; my_reader_ptr = request_reader::create(tcp_conn, boost::bind(&server::handle_request, this, _1, _2, _3)); my_reader_ptr->set_max_content_length(m_max_content_length); my_reader_ptr->receive(); } void server::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const boost::system::error_code& ec) { if (ec || ! http_request_ptr->is_valid()) { tcp_conn->set_lifecycle(tcp::connection::LIFECYCLE_CLOSE); // make sure it will get closed if (tcp_conn->is_open() && (ec.category() == http::parser::get_error_category())) { // HTTP parser error PION_LOG_INFO(m_logger, "Invalid HTTP request (" << ec.message() << ")"); m_bad_request_handler(http_request_ptr, tcp_conn); } else { static const boost::system::error_condition ERRCOND_CANCELED(boost::system::errc::operation_canceled, boost::system::system_category()), ERRCOND_EOF(boost::asio::error::eof, boost::asio::error::misc_category); if (ec == ERRCOND_CANCELED || ec == ERRCOND_EOF) { // don't spam the log with common (non-)errors that happen during normal operation PION_LOG_DEBUG(m_logger, "Lost connection on port " << get_port() << " (" << ec.message() << ")"); } else { PION_LOG_INFO(m_logger, "Lost connection on port " << get_port() << " (" << ec.message() << ")"); } tcp_conn->finish(); } return; } PION_LOG_DEBUG(m_logger, "Received a valid HTTP request"); // strip off trailing slash if the request has one std::string resource_requested(strip_trailing_slash(http_request_ptr->get_resource())); // apply any redirection redirect_map_t::const_iterator it = m_redirects.find(resource_requested); unsigned int num_redirects = 0; while (it != m_redirects.end()) { if (++num_redirects > MAX_REDIRECTS) { PION_LOG_ERROR(m_logger, "Maximum number of redirects (server::MAX_REDIRECTS) exceeded for requested resource: " << http_request_ptr->get_original_resource()); m_server_error_handler(http_request_ptr, tcp_conn, "Maximum number of redirects (server::MAX_REDIRECTS) exceeded for requested resource"); return; } resource_requested = it->second; http_request_ptr->change_resource(resource_requested); it = m_redirects.find(resource_requested); } // if authentication activated, check current request if (m_auth_ptr) { // try to verify authentication if (! m_auth_ptr->handle_request(http_request_ptr, tcp_conn)) { // the HTTP 401 message has already been sent by the authentication object PION_LOG_DEBUG(m_logger, "Authentication required for HTTP resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } return; } } // search for a handler matching the resource requested request_handler_t request_handler; if (find_request_handler(resource_requested, request_handler)) { // try to handle the request try { request_handler(http_request_ptr, tcp_conn); PION_LOG_DEBUG(m_logger, "Found request handler for HTTP resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } } catch (std::bad_alloc&) { // propagate memory errors (FATAL) throw; } catch (std::exception& e) { // recover gracefully from other exceptions thrown by request handlers PION_LOG_ERROR(m_logger, "HTTP request handler: " << pion::diagnostic_information(e)); m_server_error_handler(http_request_ptr, tcp_conn, e.what()); } catch (boost::exception& e) { // recover gracefully from boost exceptions thrown by request handlers PION_LOG_ERROR(m_logger, "HTTP request handler: " << pion::diagnostic_information(e)); m_server_error_handler(http_request_ptr, tcp_conn, pion::diagnostic_information(e)); } } else { // no web services found that could handle the request PION_LOG_INFO(m_logger, "No HTTP request handlers found for resource: " << resource_requested); if (http_request_ptr->get_resource() != http_request_ptr->get_original_resource()) { PION_LOG_DEBUG(m_logger, "Original resource requested was: " << http_request_ptr->get_original_resource()); } m_not_found_handler(http_request_ptr, tcp_conn); } } bool server::find_request_handler(const std::string& resource, request_handler_t& request_handler) const { // first make sure that HTTP resources are registered boost::mutex::scoped_lock resource_lock(m_resource_mutex); if (m_resources.empty()) return false; // iterate through each resource entry that may match the resource resource_map_t::const_iterator i = m_resources.upper_bound(resource); while (i != m_resources.begin()) { --i; // check for a match if the first part of the strings match if (i->first.empty() || resource.compare(0, i->first.size(), i->first) == 0) { // only if the resource matches the plug-in's identifier // or if resource is followed first with a '/' character if (resource.size() == i->first.size() || resource[i->first.size()]=='/') { request_handler = i->second; return true; } } } return false; } void server::add_resource(const std::string& resource, request_handler_t request_handler) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(strip_trailing_slash(resource)); m_resources.insert(std::make_pair(clean_resource, request_handler)); PION_LOG_INFO(m_logger, "Added request handler for HTTP resource: " << clean_resource); } void server::remove_resource(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(strip_trailing_slash(resource)); m_resources.erase(clean_resource); PION_LOG_INFO(m_logger, "Removed request handler for HTTP resource: " << clean_resource); } void server::add_redirect(const std::string& requested_resource, const std::string& new_resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_requested_resource(strip_trailing_slash(requested_resource)); const std::string clean_new_resource(strip_trailing_slash(new_resource)); m_redirects.insert(std::make_pair(clean_requested_resource, clean_new_resource)); PION_LOG_INFO(m_logger, "Added redirection for HTTP resource " << clean_requested_resource << " to resource " << clean_new_resource); } void server::handle_bad_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string BAD_REQUEST_HTML = "\n" "400 Bad Request\n" "\n" "

Bad Request

\n" "

Your browser sent a request that this server could not understand.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_BAD_REQUEST); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_BAD_REQUEST); writer->write_no_copy(BAD_REQUEST_HTML); writer->send(); } void server::handle_not_found_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { static const std::string NOT_FOUND_HTML_START = "\n" "404 Not Found\n" "\n" "

Not Found

\n" "

The requested URL "; static const std::string NOT_FOUND_HTML_FINISH = " was not found on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_NOT_FOUND); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_NOT_FOUND); writer->write_no_copy(NOT_FOUND_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(NOT_FOUND_HTML_FINISH); writer->send(); } void server::handle_server_error(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg) { static const std::string SERVER_ERROR_HTML_START = "\n" "500 Server Error\n" "\n" "

Internal Server Error

\n" "

The server encountered an internal error: "; static const std::string SERVER_ERROR_HTML_FINISH = "

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_SERVER_ERROR); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_SERVER_ERROR); writer->write_no_copy(SERVER_ERROR_HTML_START); writer << algorithm::xml_encode(error_msg); writer->write_no_copy(SERVER_ERROR_HTML_FINISH); writer->send(); } void server::handle_forbidden_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& error_msg) { static const std::string FORBIDDEN_HTML_START = "\n" "403 Forbidden\n" "\n" "

Forbidden

\n" "

User not authorized to access the requested URL "; static const std::string FORBIDDEN_HTML_MIDDLE = "

\n"; static const std::string FORBIDDEN_HTML_FINISH = "

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_FORBIDDEN); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_FORBIDDEN); writer->write_no_copy(FORBIDDEN_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_resource()); writer->write_no_copy(FORBIDDEN_HTML_MIDDLE); writer << error_msg; writer->write_no_copy(FORBIDDEN_HTML_FINISH); writer->send(); } void server::handle_method_not_allowed(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, const std::string& allowed_methods) { static const std::string NOT_ALLOWED_HTML_START = "\n" "405 Method Not Allowed\n" "\n" "

Not Allowed

\n" "

The requested method "; static const std::string NOT_ALLOWED_HTML_FINISH = " is not allowed on this server.

\n" "\n"; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_METHOD_NOT_ALLOWED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED); if (! allowed_methods.empty()) writer->get_response().add_header("Allow", allowed_methods); writer->write_no_copy(NOT_ALLOWED_HTML_START); writer << algorithm::xml_encode(http_request_ptr->get_method()); writer->write_no_copy(NOT_ALLOWED_HTML_FINISH); writer->send(); } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/plugin.cpp0000644000372000001440000003631212314121350016525 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #ifdef PION_WIN32 #include #else #include #endif namespace pion { // begin namespace pion // static members of plugin const std::string plugin::PION_PLUGIN_CREATE("pion_create_"); const std::string plugin::PION_PLUGIN_DESTROY("pion_destroy_"); #ifdef PION_WIN32 const std::string plugin::PION_PLUGIN_EXTENSION(".dll"); #else const std::string plugin::PION_PLUGIN_EXTENSION(".so"); #endif const std::string plugin::PION_CONFIG_EXTENSION(".conf"); boost::once_flag plugin::m_instance_flag = BOOST_ONCE_INIT; plugin::config_type *plugin::m_config_ptr = NULL; // plugin member functions void plugin::create_plugin_config(void) { static config_type UNIQUE_PION_PLUGIN_CONFIG; m_config_ptr = &UNIQUE_PION_PLUGIN_CONFIG; } void plugin::check_cygwin_path(boost::filesystem::path& final_path, const std::string& start_path) { #if defined(PION_WIN32) && defined(PION_CYGWIN_DIRECTORY) // try prepending PION_CYGWIN_DIRECTORY if not complete if (! final_path.is_complete() && final_path.has_root_directory()) { final_path = boost::filesystem::path(std::string(PION_CYGWIN_DIRECTORY) + start_path); } #endif } void plugin::add_plugin_directory(const std::string& dir) { boost::filesystem::path plugin_path = boost::filesystem::system_complete(dir); check_cygwin_path(plugin_path, dir); if (! boost::filesystem::exists(plugin_path) ) BOOST_THROW_EXCEPTION( error::directory_not_found() << error::errinfo_dir_name(dir) ); config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 cfg.m_plugin_dirs.push_back(plugin_path.string()); #else cfg.m_plugin_dirs.push_back(plugin_path.directory_string()); #endif } void plugin::reset_plugin_directories(void) { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); cfg.m_plugin_dirs.clear(); } void plugin::open(const std::string& plugin_name) { // check first if name matches an existing plugin name { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_name); if (itr != cfg.m_plugin_map.end()) { release_data(); // make sure we're not already pointing to something m_plugin_data = itr->second; ++ m_plugin_data->m_references; return; } } // nope, look for shared library file std::string plugin_file; if (!find_plugin_file(plugin_file, plugin_name)) BOOST_THROW_EXCEPTION( error::plugin_not_found() << error::errinfo_plugin_name(plugin_name) ); open_file(plugin_file); } void plugin::open_file(const std::string& plugin_file) { release_data(); // make sure we're not already pointing to something // use a temporary object first since open_plugin() may throw data_type plugin_data(get_plugin_name(plugin_file)); // check to see if we already have a matching shared library config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_data.m_plugin_name); if (itr == cfg.m_plugin_map.end()) { // no plug-ins found with the same name // open up the shared library using our temporary data object open_plugin(plugin_file, plugin_data); // may throw // all is good -> insert it into the plug-in map m_plugin_data = new data_type(plugin_data); cfg.m_plugin_map.insert( std::make_pair(m_plugin_data->m_plugin_name, m_plugin_data) ); } else { // found an existing plug-in with the same name m_plugin_data = itr->second; } // increment the number of references ++ m_plugin_data->m_references; } void plugin::release_data(void) { if (m_plugin_data != NULL) { config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); // double-check after locking mutex if (m_plugin_data != NULL && --m_plugin_data->m_references == 0) { // no more references to the plug-in library // make sure it's not a static library if (m_plugin_data->m_lib_handle != NULL) { // release the shared object close_dynamic_library(m_plugin_data->m_lib_handle); // remove it from the plug-in map map_type::iterator itr = cfg.m_plugin_map.find(m_plugin_data->m_plugin_name); // check itr just to be safe (it SHOULD always find a match) if (itr != cfg.m_plugin_map.end()) cfg.m_plugin_map.erase(itr); // release the heap object delete m_plugin_data; } } m_plugin_data = NULL; } } void plugin::grab_data(const plugin& p) { release_data(); // make sure we're not already pointing to something config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); m_plugin_data = const_cast(p.m_plugin_data); if (m_plugin_data != NULL) { ++ m_plugin_data->m_references; } } bool plugin::find_file(std::string& path_to_file, const std::string& name, const std::string& extension) { // first, try the name as-is if (check_for_file(path_to_file, name, "", extension)) return true; // nope, check search paths config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); for (std::vector::iterator i = cfg.m_plugin_dirs.begin(); i != cfg.m_plugin_dirs.end(); ++i) { if (check_for_file(path_to_file, *i, name, extension)) return true; } // no plug-in file found return false; } bool plugin::check_for_file(std::string& final_path, const std::string& start_path, const std::string& name, const std::string& extension) { // check for cygwin path oddities boost::filesystem::path cygwin_safe_path(start_path); check_cygwin_path(cygwin_safe_path, start_path); boost::filesystem::path test_path(cygwin_safe_path); // if a name is specified, append it to the test path if (! name.empty()) test_path /= name; // check for existence of file (without extension) try { // is_regular may throw if directory is not readable if (boost::filesystem::is_regular(test_path)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 final_path = test_path.string(); #else final_path = test_path.file_string(); #endif return true; } } catch (...) {} // next, try appending the extension if (name.empty()) { // no "name" specified -> append it directly to start_path test_path = boost::filesystem::path(start_path + extension); // in this case, we need to re-check for the cygwin oddities check_cygwin_path(test_path, start_path + extension); } else { // name is specified, so we can just re-use cygwin_safe_path test_path = cygwin_safe_path / boost::filesystem::path(name + extension); } // re-check for existence of file (after adding extension) try { // is_regular may throw if directory is not readable if (boost::filesystem::is_regular(test_path)) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 final_path = test_path.string(); #else final_path = test_path.file_string(); #endif return true; } } catch (...) {} // no plug-in file found return false; } void plugin::open_plugin(const std::string& plugin_file, data_type& plugin_data) { // get the name of the plugin (for create/destroy symbol names) plugin_data.m_plugin_name = get_plugin_name(plugin_file); // attempt to open the plugin; note that this tries all search paths // and also tries a variety of platform-specific extensions plugin_data.m_lib_handle = load_dynamic_library(plugin_file.c_str()); if (plugin_data.m_lib_handle == NULL) { #ifndef PION_WIN32 const char *error_msg = dlerror(); if (error_msg != NULL) { std::string error_str(plugin_file); error_str += " ("; error_str += error_msg; error_str += ')'; BOOST_THROW_EXCEPTION( error::open_plugin() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_message(error_str) ); } else #endif BOOST_THROW_EXCEPTION( error::open_plugin() << error::errinfo_plugin_name(plugin_data.m_plugin_name) ); } // find the function used to create new plugin objects plugin_data.m_create_func = get_library_symbol(plugin_data.m_lib_handle, PION_PLUGIN_CREATE + plugin_data.m_plugin_name); if (plugin_data.m_create_func == NULL) { close_dynamic_library(plugin_data.m_lib_handle); BOOST_THROW_EXCEPTION( error::plugin_missing_symbol() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_symbol_name(PION_PLUGIN_CREATE + plugin_data.m_plugin_name) ); } // find the function used to destroy existing plugin objects plugin_data.m_destroy_func = get_library_symbol(plugin_data.m_lib_handle, PION_PLUGIN_DESTROY + plugin_data.m_plugin_name); if (plugin_data.m_destroy_func == NULL) { close_dynamic_library(plugin_data.m_lib_handle); BOOST_THROW_EXCEPTION( error::plugin_missing_symbol() << error::errinfo_plugin_name(plugin_data.m_plugin_name) << error::errinfo_symbol_name(PION_PLUGIN_DESTROY + plugin_data.m_plugin_name) ); } } std::string plugin::get_plugin_name(const std::string& plugin_file) { return boost::filesystem::basename(boost::filesystem::path(plugin_file)); } void plugin::get_all_plugin_names(std::vector& plugin_names) { // Iterate through all the Plugin directories. std::vector::iterator it; config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); for (it = cfg.m_plugin_dirs.begin(); it != cfg.m_plugin_dirs.end(); ++it) { // Find all shared libraries in the directory and add them to the list of Plugin names. boost::filesystem::directory_iterator end; for (boost::filesystem::directory_iterator it2(*it); it2 != end; ++it2) { if (boost::filesystem::is_regular(*it2)) { if (boost::filesystem::extension(it2->path()) == plugin::PION_PLUGIN_EXTENSION) { # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 plugin_names.push_back(plugin::get_plugin_name(it2->path().filename().string())); #else plugin_names.push_back(plugin::get_plugin_name(it2->path().leaf())); #endif } } } } // Append static-linked libraries for (map_type::const_iterator itr = cfg.m_plugin_map.begin(); itr != cfg.m_plugin_map.end(); ++itr) { const data_type& plugin_data = *(itr->second); if (plugin_data.m_lib_handle == NULL) { plugin_names.push_back(plugin_data.m_plugin_name); } } } void *plugin::load_dynamic_library(const std::string& plugin_file) { #ifdef PION_WIN32 #ifdef _MSC_VER return LoadLibraryA(plugin_file.c_str()); #else return LoadLibrary(plugin_file.c_str()); #endif #else // convert into a full/absolute/complete path since dlopen() // does not always search the CWD on some operating systems # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 const boost::filesystem::path full_path = boost::filesystem::absolute(plugin_file); #else const boost::filesystem::path full_path = boost::filesystem::complete(plugin_file); #endif // NOTE: you must load shared libraries using RTLD_GLOBAL on Unix platforms // due to a bug in GCC (or Boost::any, depending on which crowd you want to believe). // see: http://svn.boost.org/trac/boost/ticket/754 # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3 return dlopen(full_path.string().c_str(), RTLD_LAZY | RTLD_GLOBAL); #else return dlopen(full_path.file_string().c_str(), RTLD_LAZY | RTLD_GLOBAL); #endif #endif } void plugin::close_dynamic_library(void *lib_handle) { #ifdef PION_WIN32 // Apparently, FreeLibrary sometimes causes crashes when running // unit tests under Windows. // It's hard to pin down, because many things can suppress the crashes, // such as enabling logging or setting breakpoints (i.e. things that // might help pin it down.) Also, it's very intermittent, and can be // strongly affected by other processes that are running. // So, please don't call FreeLibrary here unless you've been able to // reproduce and fix the crashing of the unit tests. //FreeLibrary((HINSTANCE) lib_handle); #else dlclose(lib_handle); #endif } void *plugin::get_library_symbol(void *lib_handle, const std::string& symbol) { #ifdef PION_WIN32 return (void*)GetProcAddress((HINSTANCE) lib_handle, symbol.c_str()); #else return dlsym(lib_handle, symbol.c_str()); #endif } void plugin::add_static_entry_point(const std::string& plugin_name, void *create_func, void *destroy_func) { // check for duplicate config_type& cfg = get_plugin_config(); boost::mutex::scoped_lock plugin_lock(cfg.m_plugin_mutex); map_type::iterator itr = cfg.m_plugin_map.find(plugin_name); if (itr == cfg.m_plugin_map.end()) { // no plug-ins found with the same name // all is good -> insert it into the plug-in map data_type *plugin_data = new data_type(plugin_name); plugin_data->m_lib_handle = NULL; // this will indicate that we are using statically linked plug-in plugin_data->m_create_func = create_func; plugin_data->m_destroy_func = destroy_func; cfg.m_plugin_map.insert(std::make_pair(plugin_name, plugin_data)); } } } // end namespace pion pion-5.0.6+dfsg.orig/src/scheduler.cpp0000644000372000001440000001377212314121350017212 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion // static members of scheduler const boost::uint32_t scheduler::DEFAULT_NUM_THREADS = 8; const boost::uint32_t scheduler::NSEC_IN_SECOND = 1000000000; // (10^9) const boost::uint32_t scheduler::MICROSEC_IN_SECOND = 1000000; // (10^6) const boost::uint32_t scheduler::KEEP_RUNNING_TIMER_SECONDS = 5; // scheduler member functions void scheduler::shutdown(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (m_is_running) { PION_LOG_INFO(m_logger, "Shutting down the thread scheduler"); while (m_active_users > 0) { // first, wait for any active users to exit PION_LOG_INFO(m_logger, "Waiting for " << m_active_users << " scheduler users to finish"); m_no_more_active_users.wait(scheduler_lock); } // shut everything down m_is_running = false; stop_services(); stop_threads(); finish_services(); finish_threads(); PION_LOG_INFO(m_logger, "The thread scheduler has shutdown"); // Make sure anyone waiting on shutdown gets notified m_scheduler_has_stopped.notify_all(); } else { // stop and finish everything to be certain that no events are pending stop_services(); stop_threads(); finish_services(); finish_threads(); // Make sure anyone waiting on shutdown gets notified // even if the scheduler did not startup successfully m_scheduler_has_stopped.notify_all(); } } void scheduler::join(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); while (m_is_running) { // sleep until scheduler_has_stopped condition is signaled m_scheduler_has_stopped.wait(scheduler_lock); } } void scheduler::keep_running(boost::asio::io_service& my_service, boost::asio::deadline_timer& my_timer) { if (m_is_running) { // schedule this again to make sure the service doesn't complete my_timer.expires_from_now(boost::posix_time::seconds(KEEP_RUNNING_TIMER_SECONDS)); my_timer.async_wait(boost::bind(&scheduler::keep_running, this, boost::ref(my_service), boost::ref(my_timer))); } } void scheduler::add_active_user(void) { if (!m_is_running) startup(); boost::mutex::scoped_lock scheduler_lock(m_mutex); ++m_active_users; } void scheduler::remove_active_user(void) { boost::mutex::scoped_lock scheduler_lock(m_mutex); if (--m_active_users == 0) m_no_more_active_users.notify_all(); } boost::system_time scheduler::get_wakeup_time(boost::uint32_t sleep_sec, boost::uint32_t sleep_nsec) { return boost::get_system_time() + boost::posix_time::seconds(sleep_sec) + boost::posix_time::microseconds(sleep_nsec / 1000); } void scheduler::process_service_work(boost::asio::io_service& service) { while (m_is_running) { try { service.run(); } catch (std::exception& e) { PION_LOG_ERROR(m_logger, boost::diagnostic_information(e)); } catch (...) { PION_LOG_ERROR(m_logger, "caught unrecognized exception"); } } } // single_service_scheduler member functions void single_service_scheduler::startup(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (! m_is_running) { PION_LOG_INFO(m_logger, "Starting thread scheduler"); m_is_running = true; // schedule a work item to make sure that the service doesn't complete m_service.reset(); keep_running(m_service, m_timer); // start multiple threads to handle async tasks for (boost::uint32_t n = 0; n < m_num_threads; ++n) { boost::shared_ptr new_thread(new boost::thread( boost::bind(&scheduler::process_service_work, this, boost::ref(m_service)) )); m_thread_pool.push_back(new_thread); } } } // one_to_one_scheduler member functions void one_to_one_scheduler::startup(void) { // lock mutex for thread safety boost::mutex::scoped_lock scheduler_lock(m_mutex); if (! m_is_running) { PION_LOG_INFO(m_logger, "Starting thread scheduler"); m_is_running = true; // make sure there are enough services initialized while (m_service_pool.size() < m_num_threads) { boost::shared_ptr service_ptr(new service_pair_type()); m_service_pool.push_back(service_ptr); } // schedule a work item for each service to make sure that it doesn't complete for (service_pool_type::iterator i = m_service_pool.begin(); i != m_service_pool.end(); ++i) { keep_running((*i)->first, (*i)->second); } // start multiple threads to handle async tasks for (boost::uint32_t n = 0; n < m_num_threads; ++n) { boost::shared_ptr new_thread(new boost::thread( boost::bind(&scheduler::process_service_work, this, boost::ref(m_service_pool[n]->first)) )); m_thread_pool.push_back(new_thread); } } } } // end namespace pion pion-5.0.6+dfsg.orig/src/http_parser.cpp0000644000372000001440000020007312314121350017557 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of parser const boost::uint32_t parser::STATUS_MESSAGE_MAX = 1024; // 1 KB const boost::uint32_t parser::METHOD_MAX = 1024; // 1 KB const boost::uint32_t parser::RESOURCE_MAX = 256 * 1024; // 256 KB const boost::uint32_t parser::QUERY_STRING_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::HEADER_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::HEADER_VALUE_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::QUERY_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::QUERY_VALUE_MAX = 1024 * 1024; // 1 MB const boost::uint32_t parser::COOKIE_NAME_MAX = 1024; // 1 KB const boost::uint32_t parser::COOKIE_VALUE_MAX = 1024 * 1024; // 1 MB const std::size_t parser::DEFAULT_CONTENT_MAX = 1024 * 1024; // 1 MB parser::error_category_t * parser::m_error_category_ptr = NULL; boost::once_flag parser::m_instance_flag = BOOST_ONCE_INIT; // parser member functions boost::tribool parser::parse(http::message& http_msg, boost::system::error_code& ec) { BOOST_ASSERT(! eof() ); boost::tribool rc = boost::indeterminate; std::size_t total_bytes_parsed = 0; if(http_msg.has_missing_packets()) { http_msg.set_data_after_missing_packet(true); } do { switch (m_message_parse_state) { // just started parsing the HTTP message case PARSE_START: m_message_parse_state = PARSE_HEADERS; // step through to PARSE_HEADERS // parsing the HTTP headers case PARSE_HEADERS: case PARSE_FOOTERS: rc = parse_headers(http_msg, ec); total_bytes_parsed += m_bytes_last_read; // check if we have finished parsing HTTP headers if (rc == true && m_message_parse_state == PARSE_HEADERS) { // finish_header_parsing() updates m_message_parse_state // We only call this for Headers and not Footers rc = finish_header_parsing(http_msg, ec); } break; // parsing chunked payload content case PARSE_CHUNKS: rc = parse_chunks(http_msg.get_chunk_cache(), ec); total_bytes_parsed += m_bytes_last_read; // check if we have finished parsing all chunks if (rc == true && !m_payload_handler) { http_msg.concatenate_chunks(); // Handle footers if present rc = ((m_message_parse_state == PARSE_FOOTERS) ? boost::indeterminate : (boost::tribool)true); } break; // parsing regular payload content with a known length case PARSE_CONTENT: rc = consume_content(http_msg, ec); total_bytes_parsed += m_bytes_last_read; break; // parsing payload content with no length (until EOF) case PARSE_CONTENT_NO_LENGTH: consume_content_as_next_chunk(http_msg.get_chunk_cache()); total_bytes_parsed += m_bytes_last_read; break; // finished parsing the HTTP message case PARSE_END: rc = true; break; } } while ( boost::indeterminate(rc) && ! eof() ); // check if we've finished parsing the HTTP message if (rc == true) { m_message_parse_state = PARSE_END; finish(http_msg); } else if(rc == false) { compute_msg_status(http_msg, false); } // update bytes last read (aggregate individual operations for caller) m_bytes_last_read = total_bytes_parsed; return rc; } boost::tribool parser::parse_missing_data(http::message& http_msg, std::size_t len, boost::system::error_code& ec) { static const char MISSING_DATA_CHAR = 'X'; boost::tribool rc = boost::indeterminate; http_msg.set_missing_packets(true); switch (m_message_parse_state) { // cannot recover from missing data while parsing HTTP headers case PARSE_START: case PARSE_HEADERS: case PARSE_FOOTERS: set_error(ec, ERROR_MISSING_HEADER_DATA); rc = false; break; // parsing chunked payload content case PARSE_CHUNKS: // parsing chunk data -> we can only recover if data fits into current chunk if (m_chunked_content_parse_state == PARSE_CHUNK && m_bytes_read_in_current_chunk < m_size_of_current_chunk && (m_size_of_current_chunk - m_bytes_read_in_current_chunk) >= len) { // use dummy content for missing data if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else { for (std::size_t n = 0; n < len && http_msg.get_chunk_cache().size() < m_max_content_length; ++n) http_msg.get_chunk_cache().push_back(MISSING_DATA_CHAR); } m_bytes_read_in_current_chunk += len; m_bytes_last_read = len; m_bytes_total_read += len; m_bytes_content_read += len; if (m_bytes_read_in_current_chunk == m_size_of_current_chunk) { m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK; } } else { // cannot recover from missing data set_error(ec, ERROR_MISSING_CHUNK_DATA); rc = false; } break; // parsing regular payload content with a known length case PARSE_CONTENT: // parsing content (with length) -> we can only recover if data fits into content if (m_bytes_content_remaining == 0) { // we have all of the remaining payload content rc = true; } else if (m_bytes_content_remaining < len) { // cannot recover from missing data set_error(ec, ERROR_MISSING_TOO_MUCH_CONTENT); rc = false; } else { // make sure content buffer is not already full if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else if ( (m_bytes_content_read+len) <= m_max_content_length) { // use dummy content for missing data for (std::size_t n = 0; n < len; ++n) http_msg.get_content()[m_bytes_content_read++] = MISSING_DATA_CHAR; } else { m_bytes_content_read += len; } m_bytes_content_remaining -= len; m_bytes_total_read += len; m_bytes_last_read = len; if (m_bytes_content_remaining == 0) rc = true; } break; // parsing payload content with no length (until EOF) case PARSE_CONTENT_NO_LENGTH: // use dummy content for missing data if (m_payload_handler) { for (std::size_t n = 0; n < len; ++n) m_payload_handler(&MISSING_DATA_CHAR, 1); } else { for (std::size_t n = 0; n < len && http_msg.get_chunk_cache().size() < m_max_content_length; ++n) http_msg.get_chunk_cache().push_back(MISSING_DATA_CHAR); } m_bytes_last_read = len; m_bytes_total_read += len; m_bytes_content_read += len; break; // finished parsing the HTTP message case PARSE_END: rc = true; break; } // check if we've finished parsing the HTTP message if (rc == true) { m_message_parse_state = PARSE_END; finish(http_msg); } else if(rc == false) { compute_msg_status(http_msg, false); } return rc; } boost::tribool parser::parse_headers(http::message& http_msg, boost::system::error_code& ec) { // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing HTTP headers // true: finished successfully parsing the HTTP headers // indeterminate: parsed bytes, but the HTTP headers are not yet finished // const char *read_start_ptr = m_read_ptr; m_bytes_last_read = 0; while (m_read_ptr < m_read_end_ptr) { if (m_save_raw_headers) m_raw_headers += *m_read_ptr; switch (m_headers_parse_state) { case PARSE_METHOD_START: // we have not yet started parsing the HTTP method string if (*m_read_ptr != ' ' && *m_read_ptr!='\r' && *m_read_ptr!='\n') { // ignore leading whitespace if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_METHOD_CHAR); return false; } m_headers_parse_state = PARSE_METHOD; m_method.erase(); m_method.push_back(*m_read_ptr); } break; case PARSE_METHOD: // we have started parsing the HTTP method string if (*m_read_ptr == ' ') { m_resource.erase(); m_headers_parse_state = PARSE_URI_STEM; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_METHOD_CHAR); return false; } else if (m_method.size() >= METHOD_MAX) { set_error(ec, ERROR_METHOD_SIZE); return false; } else { m_method.push_back(*m_read_ptr); } break; case PARSE_URI_STEM: // we have started parsing the URI stem (or resource name) if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HTTP_VERSION_H; } else if (*m_read_ptr == '?') { m_query_string.erase(); m_headers_parse_state = PARSE_URI_QUERY; } else if (*m_read_ptr == '\r') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_URI_CHAR); return false; } else if (m_resource.size() >= RESOURCE_MAX) { set_error(ec, ERROR_URI_SIZE); return false; } else { m_resource.push_back(*m_read_ptr); } break; case PARSE_URI_QUERY: // we have started parsing the URI query string if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HTTP_VERSION_H; } else if (*m_read_ptr == '\r') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_QUERY_CHAR); return false; } else if (m_query_string.size() >= QUERY_STRING_MAX) { set_error(ec, ERROR_QUERY_SIZE); return false; } else { m_query_string.push_back(*m_read_ptr); } break; case PARSE_HTTP_VERSION_H: // parsing "HTTP" if (*m_read_ptr == '\r') { // should only happen for requests (no HTTP/VERSION specified) if (! m_is_request) { set_error(ec, ERROR_VERSION_EMPTY); return false; } http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // should only happen for requests (no HTTP/VERSION specified) if (! m_is_request) { set_error(ec, ERROR_VERSION_EMPTY); return false; } http_msg.set_version_major(0); http_msg.set_version_minor(0); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != 'H') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_T_1; break; case PARSE_HTTP_VERSION_T_1: // parsing "HTTP" if (*m_read_ptr != 'T') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_T_2; break; case PARSE_HTTP_VERSION_T_2: // parsing "HTTP" if (*m_read_ptr != 'T') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_P; break; case PARSE_HTTP_VERSION_P: // parsing "HTTP" if (*m_read_ptr != 'P') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_SLASH; break; case PARSE_HTTP_VERSION_SLASH: // parsing slash after "HTTP" if (*m_read_ptr != '/') { set_error(ec, ERROR_VERSION_CHAR); return false; } m_headers_parse_state = PARSE_HTTP_VERSION_MAJOR_START; break; case PARSE_HTTP_VERSION_MAJOR_START: // parsing the first digit of the major version number if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_VERSION_CHAR); return false; } http_msg.set_version_major(*m_read_ptr - '0'); m_headers_parse_state = PARSE_HTTP_VERSION_MAJOR; break; case PARSE_HTTP_VERSION_MAJOR: // parsing the major version number (not first digit) if (*m_read_ptr == '.') { m_headers_parse_state = PARSE_HTTP_VERSION_MINOR_START; } else if (is_digit(*m_read_ptr)) { http_msg.set_version_major( (http_msg.get_version_major() * 10) + (*m_read_ptr - '0') ); } else { set_error(ec, ERROR_VERSION_CHAR); return false; } break; case PARSE_HTTP_VERSION_MINOR_START: // parsing the first digit of the minor version number if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_VERSION_CHAR); return false; } http_msg.set_version_minor(*m_read_ptr - '0'); m_headers_parse_state = PARSE_HTTP_VERSION_MINOR; break; case PARSE_HTTP_VERSION_MINOR: // parsing the major version number (not first digit) if (*m_read_ptr == ' ') { // ignore trailing spaces after version in request if (! m_is_request) { m_headers_parse_state = PARSE_STATUS_CODE_START; } } else if (*m_read_ptr == '\r') { // should only happen for requests if (! m_is_request) { set_error(ec, ERROR_STATUS_EMPTY); return false; } m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // should only happen for requests if (! m_is_request) { set_error(ec, ERROR_STATUS_EMPTY); return false; } m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_digit(*m_read_ptr)) { http_msg.set_version_minor( (http_msg.get_version_minor() * 10) + (*m_read_ptr - '0') ); } else { set_error(ec, ERROR_VERSION_CHAR); return false; } break; case PARSE_STATUS_CODE_START: // parsing the first digit of the response status code if (!is_digit(*m_read_ptr)) { set_error(ec, ERROR_STATUS_CHAR); return false; } m_status_code = (*m_read_ptr - '0'); m_headers_parse_state = PARSE_STATUS_CODE; break; case PARSE_STATUS_CODE: // parsing the response status code (not first digit) if (*m_read_ptr == ' ') { m_status_message.erase(); m_headers_parse_state = PARSE_STATUS_MESSAGE; } else if (is_digit(*m_read_ptr)) { m_status_code = ( (m_status_code * 10) + (*m_read_ptr - '0') ); } else if (*m_read_ptr == '\r') { // recover from status message not sent m_status_message.erase(); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { // recover from status message not sent m_status_message.erase(); m_headers_parse_state = PARSE_EXPECTING_CR; } else { set_error(ec, ERROR_STATUS_CHAR); return false; } break; case PARSE_STATUS_MESSAGE: // parsing the response status message if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_CR; } else if (is_control(*m_read_ptr)) { set_error(ec, ERROR_STATUS_CHAR); return false; } else if (m_status_message.size() >= STATUS_MESSAGE_MAX) { set_error(ec, ERROR_STATUS_CHAR); return false; } else { m_status_message.push_back(*m_read_ptr); } break; case PARSE_EXPECTING_NEWLINE: // we received a CR; expecting a newline to follow if (*m_read_ptr == '\n') { // check if this is a HTTP 0.9 "Simple Request" if (m_is_request && http_msg.get_version_major() == 0) { PION_LOG_DEBUG(m_logger, "HTTP 0.9 Simple-Request found"); ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } else { m_headers_parse_state = PARSE_HEADER_START; } } else if (*m_read_ptr == '\r') { // we received two CR's in a row // assume CR only is (incorrectly) being used for line termination // therefore, the message is finished ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_EXPECTING_CR: // we received a newline without a CR if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_HEADER_START; } else if (*m_read_ptr == '\n') { // we received two newlines in a row // assume newline only is (incorrectly) being used for line termination // therefore, the message is finished ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_WHITESPACE: // parsing whitespace before a header name if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != '\t' && *m_read_ptr != ' ') { if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } // assume it is the first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_START: // parsing the start of a new header if (*m_read_ptr == '\r') { m_headers_parse_state = PARSE_EXPECTING_FINAL_NEWLINE; } else if (*m_read_ptr == '\n') { m_headers_parse_state = PARSE_EXPECTING_FINAL_CR; } else if (*m_read_ptr == '\t' || *m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_WHITESPACE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // first character for the name of a header m_header_name.erase(); m_header_name.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_NAME; } break; case PARSE_HEADER_NAME: // parsing the name of a header if (*m_read_ptr == ':') { m_header_value.erase(); m_headers_parse_state = PARSE_SPACE_BEFORE_HEADER_VALUE; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else if (m_header_name.size() >= HEADER_NAME_MAX) { set_error(ec, ERROR_HEADER_NAME_SIZE); return false; } else { // character (not first) for the name of a header m_header_name.push_back(*m_read_ptr); } break; case PARSE_SPACE_BEFORE_HEADER_VALUE: // parsing space character before a header's value if (*m_read_ptr == ' ') { m_headers_parse_state = PARSE_HEADER_VALUE; } else if (*m_read_ptr == '\r') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (!is_char(*m_read_ptr) || is_control(*m_read_ptr) || is_special(*m_read_ptr)) { set_error(ec, ERROR_HEADER_CHAR); return false; } else { // assume it is the first character for the value of a header m_header_value.push_back(*m_read_ptr); m_headers_parse_state = PARSE_HEADER_VALUE; } break; case PARSE_HEADER_VALUE: // parsing the value of a header if (*m_read_ptr == '\r') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_NEWLINE; } else if (*m_read_ptr == '\n') { http_msg.add_header(m_header_name, m_header_value); m_headers_parse_state = PARSE_EXPECTING_CR; } else if (*m_read_ptr != '\t' && is_control(*m_read_ptr)) { // RFC 2616, 2.2 basic Rules. // TEXT = // LWS = [CRLF] 1*( SP | HT ) // // TODO: parsing of folding LWS in multiple lines headers // doesn't work properly still set_error(ec, ERROR_HEADER_CHAR); return false; } else if (m_header_value.size() >= HEADER_VALUE_MAX) { set_error(ec, ERROR_HEADER_VALUE_SIZE); return false; } else { // character (not first) for the value of a header m_header_value.push_back(*m_read_ptr); } break; case PARSE_EXPECTING_FINAL_NEWLINE: if (*m_read_ptr == '\n') ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; case PARSE_EXPECTING_FINAL_CR: if (*m_read_ptr == '\r') ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return true; } ++m_read_ptr; } m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; return boost::indeterminate; } void parser::update_message_with_header_data(http::message& http_msg) const { if (is_parsing_request()) { // finish an HTTP request message http::request& http_request(dynamic_cast(http_msg)); http_request.set_method(m_method); http_request.set_resource(m_resource); http_request.set_query_string(m_query_string); // parse query pairs from the URI query string if (! m_query_string.empty()) { if (! parse_url_encoded(http_request.get_queries(), m_query_string.c_str(), m_query_string.size())) PION_LOG_WARN(m_logger, "Request query string parsing failed (URI)"); } // parse "Cookie" headers in request std::pair cookie_pair = http_request.get_headers().equal_range(http::types::HEADER_COOKIE); for (ihash_multimap::const_iterator cookie_iterator = cookie_pair.first; cookie_iterator != http_request.get_headers().end() && cookie_iterator != cookie_pair.second; ++cookie_iterator) { if (! parse_cookie_header(http_request.get_cookies(), cookie_iterator->second, false) ) PION_LOG_WARN(m_logger, "Cookie header parsing failed"); } } else { // finish an HTTP response message http::response& http_response(dynamic_cast(http_msg)); http_response.set_status_code(m_status_code); http_response.set_status_message(m_status_message); // parse "Set-Cookie" headers in response std::pair cookie_pair = http_response.get_headers().equal_range(http::types::HEADER_SET_COOKIE); for (ihash_multimap::const_iterator cookie_iterator = cookie_pair.first; cookie_iterator != http_response.get_headers().end() && cookie_iterator != cookie_pair.second; ++cookie_iterator) { if (! parse_cookie_header(http_response.get_cookies(), cookie_iterator->second, true) ) PION_LOG_WARN(m_logger, "Set-Cookie header parsing failed"); } } } boost::tribool parser::finish_header_parsing(http::message& http_msg, boost::system::error_code& ec) { boost::tribool rc = boost::indeterminate; m_bytes_content_remaining = m_bytes_content_read = 0; http_msg.set_content_length(0); http_msg.update_transfer_encoding_using_header(); update_message_with_header_data(http_msg); if (http_msg.is_chunked()) { // content is encoded using chunks m_message_parse_state = PARSE_CHUNKS; // return true if parsing headers only if (m_parse_headers_only) rc = true; } else if (http_msg.is_content_length_implied()) { // content length is implied to be zero m_message_parse_state = PARSE_END; rc = true; } else { // content length should be specified in the headers if (http_msg.has_header(http::types::HEADER_CONTENT_LENGTH)) { // message has a content-length header try { http_msg.update_content_length_using_header(); } catch (...) { PION_LOG_ERROR(m_logger, "Unable to update content length"); set_error(ec, ERROR_INVALID_CONTENT_LENGTH); return false; } // check if content-length header == 0 if (http_msg.get_content_length() == 0) { m_message_parse_state = PARSE_END; rc = true; } else { m_message_parse_state = PARSE_CONTENT; m_bytes_content_remaining = http_msg.get_content_length(); // check if content-length exceeds maximum allowed if (m_bytes_content_remaining > m_max_content_length) http_msg.set_content_length(m_max_content_length); if (m_parse_headers_only) { // return true if parsing headers only rc = true; } else { // allocate a buffer for payload content (may be zero-size) http_msg.create_content_buffer(); } } } else { // no content-length specified, and the content length cannot // otherwise be determined // only if not a request, read through the close of the connection if (! m_is_request) { // clear the chunk buffers before we start http_msg.get_chunk_cache().clear(); // continue reading content until there is no more data m_message_parse_state = PARSE_CONTENT_NO_LENGTH; // return true if parsing headers only if (m_parse_headers_only) rc = true; } else { m_message_parse_state = PARSE_END; rc = true; } } } finished_parsing_headers(ec); return rc; } bool parser::parse_uri(const std::string& uri, std::string& proto, std::string& host, boost::uint16_t& port, std::string& path, std::string& query) { size_t proto_end = uri.find("://"); size_t proto_len = 0; if(proto_end != std::string::npos) { proto = uri.substr(0, proto_end); proto_len = proto_end + 3; // add :// } else { proto.clear(); } // find a first slash charact // that indicates the end of the : part size_t server_port_end = uri.find('/', proto_len); if(server_port_end == std::string::npos) { return false; } // copy : into temp string std::string t; t = uri.substr(proto_len, server_port_end - proto_len); size_t port_pos = t.find(':', 0); // assign output host and port parameters host = t.substr(0, port_pos); // if port_pos == npos, copy whole string if(host.length() == 0) { return false; } // parse the port, if it's not empty if(port_pos != std::string::npos) { try { port = boost::lexical_cast(t.substr(port_pos+1)); } catch (boost::bad_lexical_cast &) { return false; } } else if (proto == "http" || proto == "HTTP") { port = 80; } else if (proto == "https" || proto == "HTTPS") { port = 443; } else { port = 0; } // copy the rest of the URI into path part path = uri.substr(server_port_end); // split the path and the query string parts size_t query_pos = path.find('?', 0); if(query_pos != std::string::npos) { query = path.substr(query_pos + 1, path.length() - query_pos - 1); path = path.substr(0, query_pos); } else { query.clear(); } return true; } bool parser::parse_url_encoded(ihash_multimap& dict, const char *ptr, const size_t len) { // sanity check if (ptr == NULL || len == 0) return true; // used to track whether we are parsing the name or value enum QueryParseState { QUERY_PARSE_NAME, QUERY_PARSE_VALUE } parse_state = QUERY_PARSE_NAME; // misc other variables used for parsing const char * const end = ptr + len; std::string query_name; std::string query_value; // iterate through each encoded character while (ptr < end) { switch (parse_state) { case QUERY_PARSE_NAME: // parsing query name if (*ptr == '=') { // end of name found (OK if empty) parse_state = QUERY_PARSE_VALUE; } else if (*ptr == '&') { // if query name is empty, just skip it (i.e. "&&") if (! query_name.empty()) { // assume that "=" is missing -- it's OK if the value is empty dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_name.erase(); } } else if (*ptr == '\r' || *ptr == '\n' || *ptr == '\t') { // ignore linefeeds, carriage return and tabs (normally within POST content) } else if (is_control(*ptr) || query_name.size() >= QUERY_NAME_MAX) { // control character detected, or max sized exceeded return false; } else { // character is part of the name query_name.push_back(*ptr); } break; case QUERY_PARSE_VALUE: // parsing query value if (*ptr == '&') { // end of value found (OK if empty) if (! query_name.empty()) { dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_name.erase(); } query_value.erase(); parse_state = QUERY_PARSE_NAME; } else if (*ptr == ',') { // end of value found in multi-value list (OK if empty) if (! query_name.empty()) dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); query_value.erase(); } else if (*ptr == '\r' || *ptr == '\n' || *ptr == '\t') { // ignore linefeeds, carriage return and tabs (normally within POST content) } else if (is_control(*ptr) || query_value.size() >= QUERY_VALUE_MAX) { // control character detected, or max sized exceeded return false; } else { // character is part of the value query_value.push_back(*ptr); } break; } ++ptr; } // handle last pair in string if (! query_name.empty()) dict.insert( std::make_pair(algorithm::url_decode(query_name), algorithm::url_decode(query_value)) ); return true; } bool parser::parse_multipart_form_data(ihash_multimap& dict, const std::string& content_type, const char *ptr, const size_t len) { // sanity check if (ptr == NULL || len == 0) return true; // parse field boundary std::size_t pos = content_type.find("boundary="); if (pos == std::string::npos) return false; const std::string boundary = std::string("--") + content_type.substr(pos+9); // used to track what we are parsing enum MultiPartParseState { MP_PARSE_START, MP_PARSE_HEADER_CR, MP_PARSE_HEADER_LF, MP_PARSE_HEADER_NAME, MP_PARSE_HEADER_SPACE, MP_PARSE_HEADER_VALUE, MP_PARSE_HEADER_LAST_LF, MP_PARSE_FIELD_DATA } parse_state = MP_PARSE_START; // a few variables used for parsing std::string header_name; std::string header_value; std::string field_name; std::string field_value; bool found_parameter = false; bool save_current_field = true; const char * const end_ptr = ptr + len; ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); while (ptr != NULL && ptr < end_ptr) { switch (parse_state) { case MP_PARSE_START: // start parsing a new field header_name.clear(); header_value.clear(); field_name.clear(); field_value.clear(); save_current_field = true; ptr += boundary.size() - 1; parse_state = MP_PARSE_HEADER_CR; break; case MP_PARSE_HEADER_CR: // expecting CR while parsing headers if (*ptr == '\r') { // got it -> look for linefeed parse_state = MP_PARSE_HEADER_LF; } else if (*ptr == '\n') { // got a linefeed? try to ignore and start parsing header parse_state = MP_PARSE_HEADER_NAME; } else if (*ptr == '-' && ptr+1 < end_ptr && ptr[1] == '-') { // end of multipart content return true; } else return false; break; case MP_PARSE_HEADER_LF: // expecting LF while parsing headers if (*ptr == '\n') { // got it -> start parsing header name parse_state = MP_PARSE_HEADER_NAME; } else return false; break; case MP_PARSE_HEADER_NAME: // parsing the name of a header if (*ptr == '\r' || *ptr == '\n') { if (header_name.empty()) { // got CR or LF at beginning; skip to data parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LAST_LF : MP_PARSE_FIELD_DATA); } else { // premature CR or LF -> just ignore and start parsing next header parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LF : MP_PARSE_HEADER_NAME); } } else if (*ptr == ':') { // done parsing header name -> consume space next parse_state = MP_PARSE_HEADER_SPACE; } else { // one more byte for header name header_name += *ptr; } break; case MP_PARSE_HEADER_SPACE: // expecting a space before header value if (*ptr == '\r') { // premature CR -> just ignore and start parsing next header parse_state = MP_PARSE_HEADER_LF; } else if (*ptr == '\n') { // premature LF -> just ignore and start parsing next header parse_state = MP_PARSE_HEADER_NAME; } else if (*ptr != ' ') { // not a space -> assume it's a value char header_value += *ptr; parse_state = MP_PARSE_HEADER_VALUE; } // otherwise just ignore the space(s) break; case MP_PARSE_HEADER_VALUE: // parsing the value of a header if (*ptr == '\r' || *ptr == '\n') { // reached the end of the value -> check if it's important if (boost::algorithm::iequals(header_name, types::HEADER_CONTENT_TYPE)) { // only keep fields that have a text type or no type save_current_field = boost::algorithm::iequals(header_value.substr(0, 5), "text/"); } else if (boost::algorithm::iequals(header_name, types::HEADER_CONTENT_DISPOSITION)) { // get current field from content-disposition header std::size_t name_pos = header_value.find("name=\""); if (name_pos != std::string::npos) { for (name_pos += 6; name_pos < header_value.size() && header_value[name_pos] != '\"'; ++name_pos) { field_name += header_value[name_pos]; } } } // clear values and start parsing next header header_name.clear(); header_value.clear(); parse_state = (*ptr == '\r' ? MP_PARSE_HEADER_LF : MP_PARSE_HEADER_NAME); } else { // one more byte for header value header_value += *ptr; } break; case MP_PARSE_HEADER_LAST_LF: // expecting final linefeed to terminate headers and begin field data if (*ptr == '\n') { // got it if (save_current_field && !field_name.empty()) { // parse the field if we care & know enough about it parse_state = MP_PARSE_FIELD_DATA; } else { // otherwise skip ahead to next field parse_state = MP_PARSE_START; ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); } } else return false; break; case MP_PARSE_FIELD_DATA: // parsing the value of a field -> find the end of it const char *field_end_ptr = end_ptr; const char *next_ptr = std::search(ptr, end_ptr, boundary.begin(), boundary.end()); if (next_ptr) { // don't include CRLF before next boundary const char *temp_ptr = next_ptr - 2; if (temp_ptr[0] == '\r' && temp_ptr[1] == '\n') field_end_ptr = temp_ptr; else field_end_ptr = next_ptr; } field_value.assign(ptr, field_end_ptr - ptr); // add the field to the query dictionary dict.insert( std::make_pair(field_name, field_value) ); found_parameter = true; // skip ahead to next field parse_state = MP_PARSE_START; ptr = next_ptr; break; } // we've already bumped position if MP_PARSE_START if (parse_state != MP_PARSE_START) ++ptr; } return found_parameter; } bool parser::parse_cookie_header(ihash_multimap& dict, const char *ptr, const size_t len, bool set_cookie_header) { // BASED ON RFC 2109 // http://www.ietf.org/rfc/rfc2109.txt // // The current implementation ignores cookie attributes which begin with '$' // (i.e. $Path=/, $Domain=, etc.) // used to track what we are parsing enum CookieParseState { COOKIE_PARSE_NAME, COOKIE_PARSE_VALUE, COOKIE_PARSE_IGNORE } parse_state = COOKIE_PARSE_NAME; // misc other variables used for parsing const char * const end = ptr + len; std::string cookie_name; std::string cookie_value; char value_quote_character = '\0'; // iterate through each character while (ptr < end) { switch (parse_state) { case COOKIE_PARSE_NAME: // parsing cookie name if (*ptr == '=') { // end of name found (OK if empty) value_quote_character = '\0'; parse_state = COOKIE_PARSE_VALUE; } else if (*ptr == ';' || *ptr == ',') { // ignore empty cookie names since this may occur naturally // when quoted values are encountered if (! cookie_name.empty()) { // value is empty (OK) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); } } else if (*ptr != ' ') { // ignore whitespace // check if control character detected, or max sized exceeded if (is_control(*ptr) || cookie_name.size() >= COOKIE_NAME_MAX) return false; // character is part of the name cookie_name.push_back(*ptr); } break; case COOKIE_PARSE_VALUE: // parsing cookie value if (value_quote_character == '\0') { // value is not (yet) quoted if (*ptr == ';' || *ptr == ',') { // end of value found (OK if empty) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); cookie_value.erase(); parse_state = COOKIE_PARSE_NAME; } else if (*ptr == '\'' || *ptr == '"') { if (cookie_value.empty()) { // begin quoted value value_quote_character = *ptr; } else if (cookie_value.size() >= COOKIE_VALUE_MAX) { // max size exceeded return false; } else { // assume character is part of the (unquoted) value cookie_value.push_back(*ptr); } } else if (*ptr != ' ' || !cookie_value.empty()) { // ignore leading unquoted whitespace // check if control character detected, or max sized exceeded if (is_control(*ptr) || cookie_value.size() >= COOKIE_VALUE_MAX) return false; // character is part of the (unquoted) value cookie_value.push_back(*ptr); } } else { // value is quoted if (*ptr == value_quote_character) { // end of value found (OK if empty) if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); cookie_name.erase(); cookie_value.erase(); parse_state = COOKIE_PARSE_IGNORE; } else if (cookie_value.size() >= COOKIE_VALUE_MAX) { // max size exceeded return false; } else { // character is part of the (quoted) value cookie_value.push_back(*ptr); } } break; case COOKIE_PARSE_IGNORE: // ignore everything until we reach a comma "," or semicolon ";" if (*ptr == ';' || *ptr == ',') parse_state = COOKIE_PARSE_NAME; break; } ++ptr; } // handle last cookie in string if (! is_cookie_attribute(cookie_name, set_cookie_header)) dict.insert( std::make_pair(cookie_name, cookie_value) ); return true; } boost::tribool parser::parse_chunks(http::message::chunk_cache_t& chunks, boost::system::error_code& ec) { // // note that boost::tribool may have one of THREE states: // // false: encountered an error while parsing message // true: finished successfully parsing the message // indeterminate: parsed bytes, but the message is not yet finished // const char *read_start_ptr = m_read_ptr; m_bytes_last_read = 0; while (m_read_ptr < m_read_end_ptr) { switch (m_chunked_content_parse_state) { case PARSE_CHUNK_SIZE_START: // we have not yet started parsing the next chunk size if (is_hex_digit(*m_read_ptr)) { m_chunk_size_str.erase(); m_chunk_size_str.push_back(*m_read_ptr); m_chunked_content_parse_state = PARSE_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09' || *m_read_ptr == '\x0D' || *m_read_ptr == '\x0A') { // Ignore leading whitespace. Technically, the standard probably doesn't allow white space here, // but we'll be flexible, since there's no ambiguity. break; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_CHUNK_SIZE: if (is_hex_digit(*m_read_ptr)) { m_chunk_size_str.push_back(*m_read_ptr); } else if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09') { // Ignore trailing tabs or spaces. Technically, the standard probably doesn't allow this, // but we'll be flexible, since there's no ambiguity. m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ';') { // Following the semicolon we have text which will be ignored till we encounter // a CRLF m_chunked_content_parse_state = PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_IGNORED_TEXT_AFTER_CHUNK_SIZE: if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } break; case PARSE_EXPECTING_CR_AFTER_CHUNK_SIZE: if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE; } else if (*m_read_ptr == ' ' || *m_read_ptr == '\x09') { // Ignore trailing tabs or spaces. Technically, the standard probably doesn't allow this, // but we'll be flexible, since there's no ambiguity. break; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_LF_AFTER_CHUNK_SIZE: // We received a CR; expecting LF to follow. We can't be flexible here because // if we see anything other than LF, we can't be certain where the chunk starts. if (*m_read_ptr == '\x0A') { m_bytes_read_in_current_chunk = 0; m_size_of_current_chunk = strtol(m_chunk_size_str.c_str(), 0, 16); if (m_size_of_current_chunk == 0) { m_chunked_content_parse_state = PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK; } else { m_chunked_content_parse_state = PARSE_CHUNK; } } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_CHUNK: if (m_bytes_read_in_current_chunk < m_size_of_current_chunk) { if (m_payload_handler) { const std::size_t bytes_avail = bytes_available(); const std::size_t bytes_in_chunk = m_size_of_current_chunk - m_bytes_read_in_current_chunk; const std::size_t len = (bytes_in_chunk > bytes_avail) ? bytes_avail : bytes_in_chunk; m_payload_handler(m_read_ptr, len); m_bytes_read_in_current_chunk += len; if (len > 1) m_read_ptr += (len - 1); } else if (chunks.size() < m_max_content_length) { chunks.push_back(*m_read_ptr); m_bytes_read_in_current_chunk++; } } if (m_bytes_read_in_current_chunk == m_size_of_current_chunk) { m_chunked_content_parse_state = PARSE_EXPECTING_CR_AFTER_CHUNK; } break; case PARSE_EXPECTING_CR_AFTER_CHUNK: // we've read exactly m_size_of_current_chunk bytes since starting the current chunk if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_LF_AFTER_CHUNK; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_LF_AFTER_CHUNK: // we received a CR; expecting LF to follow if (*m_read_ptr == '\x0A') { m_chunked_content_parse_state = PARSE_CHUNK_SIZE_START; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } break; case PARSE_EXPECTING_FINAL_CR_OR_FOOTERS_AFTER_LAST_CHUNK: // we've read the final chunk; expecting final CRLF if (*m_read_ptr == '\x0D') { m_chunked_content_parse_state = PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK; } else { // Packet contains footers; Chunk parsing is commplete // Footer data contains name value pairs to be added to HTTP Message m_message_parse_state = PARSE_FOOTERS; m_headers_parse_state = PARSE_HEADER_START; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; PION_LOG_DEBUG(m_logger, "Parsed " << m_bytes_last_read << " chunked payload content bytes; chunked content complete."); return true; } break; case PARSE_EXPECTING_FINAL_LF_AFTER_LAST_CHUNK: // we received the final CR; expecting LF to follow if (*m_read_ptr == '\x0A') { ++m_read_ptr; m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; PION_LOG_DEBUG(m_logger, "Parsed " << m_bytes_last_read << " chunked payload content bytes; chunked content complete."); return true; } else { set_error(ec, ERROR_CHUNK_CHAR); return false; } } ++m_read_ptr; } m_bytes_last_read = (m_read_ptr - read_start_ptr); m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; return boost::indeterminate; } boost::tribool parser::consume_content(http::message& http_msg, boost::system::error_code& ec) { size_t content_bytes_to_read; size_t content_bytes_available = bytes_available(); boost::tribool rc = boost::indeterminate; if (m_bytes_content_remaining == 0) { // we have all of the remaining payload content return true; } else { if (content_bytes_available >= m_bytes_content_remaining) { // we have all of the remaining payload content rc = true; content_bytes_to_read = m_bytes_content_remaining; } else { // only some of the payload content is available content_bytes_to_read = content_bytes_available; } m_bytes_content_remaining -= content_bytes_to_read; } // make sure content buffer is not already full if (m_payload_handler) { m_payload_handler(m_read_ptr, content_bytes_to_read); } else if (m_bytes_content_read < m_max_content_length) { if (m_bytes_content_read + content_bytes_to_read > m_max_content_length) { // read would exceed maximum size for content buffer // copy only enough bytes to fill up the content buffer memcpy(http_msg.get_content() + m_bytes_content_read, m_read_ptr, m_max_content_length - m_bytes_content_read); } else { // copy all bytes available memcpy(http_msg.get_content() + m_bytes_content_read, m_read_ptr, content_bytes_to_read); } } m_read_ptr += content_bytes_to_read; m_bytes_content_read += content_bytes_to_read; m_bytes_total_read += content_bytes_to_read; m_bytes_last_read = content_bytes_to_read; return rc; } std::size_t parser::consume_content_as_next_chunk(http::message::chunk_cache_t& chunks) { if (bytes_available() == 0) { m_bytes_last_read = 0; } else { // note: m_bytes_last_read must be > 0 because of bytes_available() check m_bytes_last_read = (m_read_end_ptr - m_read_ptr); if (m_payload_handler) { m_payload_handler(m_read_ptr, m_bytes_last_read); m_read_ptr += m_bytes_last_read; } else { while (m_read_ptr < m_read_end_ptr) { if (chunks.size() < m_max_content_length) chunks.push_back(*m_read_ptr); ++m_read_ptr; } } m_bytes_total_read += m_bytes_last_read; m_bytes_content_read += m_bytes_last_read; } return m_bytes_last_read; } void parser::finish(http::message& http_msg) const { switch (m_message_parse_state) { case PARSE_START: http_msg.set_is_valid(false); http_msg.set_content_length(0); http_msg.create_content_buffer(); return; case PARSE_END: http_msg.set_is_valid(true); break; case PARSE_HEADERS: case PARSE_FOOTERS: http_msg.set_is_valid(false); update_message_with_header_data(http_msg); http_msg.set_content_length(0); http_msg.create_content_buffer(); break; case PARSE_CONTENT: http_msg.set_is_valid(false); if (get_content_bytes_read() < m_max_content_length) // NOTE: we can read more than we have allocated/stored http_msg.set_content_length(get_content_bytes_read()); break; case PARSE_CHUNKS: http_msg.set_is_valid(m_chunked_content_parse_state==PARSE_CHUNK_SIZE_START); if (!m_payload_handler) http_msg.concatenate_chunks(); break; case PARSE_CONTENT_NO_LENGTH: http_msg.set_is_valid(true); if (!m_payload_handler) http_msg.concatenate_chunks(); break; } compute_msg_status(http_msg, http_msg.is_valid()); if (is_parsing_request() && !m_payload_handler && !m_parse_headers_only) { // Parse query pairs from post content if content type is x-www-form-urlencoded. // Type could be followed by parameters (as defined in section 3.6 of RFC 2616) // e.g. Content-Type: application/x-www-form-urlencoded; charset=UTF-8 http::request& http_request(dynamic_cast(http_msg)); const std::string& content_type_header = http_request.get_header(http::types::HEADER_CONTENT_TYPE); if (content_type_header.compare(0, http::types::CONTENT_TYPE_URLENCODED.length(), http::types::CONTENT_TYPE_URLENCODED) == 0) { if (! parse_url_encoded(http_request.get_queries(), http_request.get_content(), http_request.get_content_length())) PION_LOG_WARN(m_logger, "Request form data parsing failed (POST urlencoded)"); } else if (content_type_header.compare(0, http::types::CONTENT_TYPE_MULTIPART_FORM_DATA.length(), http::types::CONTENT_TYPE_MULTIPART_FORM_DATA) == 0) { if (! parse_multipart_form_data(http_request.get_queries(), content_type_header, http_request.get_content(), http_request.get_content_length())) PION_LOG_WARN(m_logger, "Request form data parsing failed (POST multipart)"); } } } void parser::compute_msg_status(http::message& http_msg, bool msg_parsed_ok ) { http::message::data_status_t st = http::message::STATUS_NONE; if(http_msg.has_missing_packets()) { st = http_msg.has_data_after_missing_packets() ? http::message::STATUS_PARTIAL : http::message::STATUS_TRUNCATED; } else { st = msg_parsed_ok ? http::message::STATUS_OK : http::message::STATUS_TRUNCATED; } http_msg.set_status(st); } void parser::create_error_category(void) { static error_category_t UNIQUE_ERROR_CATEGORY; m_error_category_ptr = &UNIQUE_ERROR_CATEGORY; } bool parser::parse_forwarded_for(const std::string& header, std::string& public_ip) { // static regex's used to check for ipv4 address static const boost::regex IPV4_ADDR_RX("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"); /// static regex used to check for private/local networks: /// 10.* /// 127.* /// 192.168.* /// 172.16-31.* static const boost::regex PRIVATE_NET_RX("(10\\.[0-9]{1,3}|127\\.[0-9]{1,3}|192\\.168|172\\.1[6-9]|172\\.2[0-9]|172\\.3[0-1])\\.[0-9]{1,3}\\.[0-9]{1,3}"); // sanity check if (header.empty()) return false; // local variables re-used by while loop boost::match_results m; std::string::const_iterator start_it = header.begin(); // search for next ip address within the header while (boost::regex_search(start_it, header.end(), m, IPV4_ADDR_RX)) { // get ip that matched std::string ip_str(m[0].first, m[0].second); // check if public network ip address if (! boost::regex_match(ip_str, PRIVATE_NET_RX) ) { // match found! public_ip = ip_str; return true; } // update search starting position start_it = m[0].second; } // no matches found return false; } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/spdy_parser.cpp0000644000372000001440000004242612314121350017565 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include #include #include #include namespace pion { // begin namespace pion namespace spdy { // begin namespace spdy /// RST stream status string from code, return NULL for unknown status code static char const* rst_stream_status(boost::uint32_t rst_stream_status_code) { switch (rst_stream_status_code) { case 1: return "PROTOCOL_ERROR"; case 2: return "INVALID_STREAM"; case 3: return "REFUSED_STREAM"; case 4: return "UNSUPPORTED_VERSION"; case 5: return "CANCEL"; case 6: return "INTERNAL_ERROR"; case 7: return "FLOW_CONTROL_ERROR"; case 8: return "STREAM_IN_USE"; case 9: return "STREAM_ALREADY_CLOSED"; case 10: return "INVALID_CREDENTIALS"; case 11: return "FRAME_TOO_LARGE"; case 12: return "INVALID"; default: return NULL; } } parser::error_category_t * parser::m_error_category_ptr = NULL; boost::once_flag parser::m_instance_flag = BOOST_ONCE_INIT; // parser member functions parser::parser() : m_read_ptr(NULL), m_uncompressed_ptr(NULL), m_current_data_chunk_ptr(NULL), m_last_data_chunk_ptr(NULL), m_logger(PION_GET_LOGGER("pion.spdy.parser")) {} boost::tribool parser::parse(http_protocol_info& http_info, boost::system::error_code& ec, decompressor_ptr& decompressor, const char *packet_ptr, boost::uint32_t& length_packet, boost::uint32_t current_stream_count) { // initialize read position set_read_ptr(packet_ptr); // Parse the frame return parse_spdy_frame(ec, decompressor, http_info, length_packet, current_stream_count); } bool parser::is_spdy_control_frame(const char *ptr) { // Parse further for higher accuracy // Get the control bit boost::uint8_t control_bit; boost::uint16_t version, type; boost::uint16_t byte_value = algorithm::to_uint16(ptr); control_bit = byte_value >> (sizeof(short) * CHAR_BIT - 1); if (!control_bit) return false; // Control bit is set; This is a control frame // Get the version number boost::uint16_t two_bytes = algorithm::to_uint16(ptr); version = two_bytes & 0x7FFF; if(version < 1 || version > 3){ // SPDY does not have a version higher than 3 and lower than 1 at the moment return false; } // Increment the read pointer ptr += 2; type = algorithm::to_uint16(ptr); if (type >= SPDY_INVALID) { // Not among the recognized SPDY types return false; } return true; } spdy_frame_type parser::get_spdy_frame_type(const char *ptr) { // Determine if this a SPDY frame BOOST_ASSERT(ptr); /* * The first byte of a SPDY frame must be either 0 or * 0x80. If it's not, assume that this is not SPDY. * (In theory, a data frame could have a stream ID * >= 2^24, in which case it won't have 0 for a first * byte, but this is a pretty reliable heuristic for * now.) */ spdy_frame_type spdy_frame; boost::uint8_t first_byte = *((unsigned char *)ptr); if(first_byte == 0x80){ spdy_frame = spdy_control_frame; }else if(first_byte == 0x0){ spdy_frame = spdy_data_frame; }else{ spdy_frame = spdy_invalid_frame; } return spdy_frame; } boost::uint32_t parser::get_control_frame_stream_id(const char *ptr) { // The stream ID for control frames is at a 8 bit offser from start ptr += 8; boost::uint32_t four_bytes = algorithm::to_uint32(ptr); return four_bytes & 0x7FFFFFFF; } boost::tribool parser::parse_spdy_frame(boost::system::error_code& ec, decompressor_ptr& decompressor, http_protocol_info& http_info, boost::uint32_t& length_packet, boost::uint32_t current_stream_count) { boost::tribool rc = true; // Verify that this is a spdy frame BOOST_ASSERT(m_read_ptr); boost::uint8_t first_byte = (boost::uint8_t)*m_read_ptr; if (first_byte != 0x80 && first_byte != 0x0) { // This is not a SPDY frame, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Frame"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return false; } boost::uint8_t control_bit; spdy_control_frame_info frame; boost::uint32_t stream_id = 0; ec.clear(); // Populate the frame bool populate_frame_result = populate_frame(ec, frame, length_packet, stream_id, http_info); if(!populate_frame_result){ /// There was an error; No need to further parse. return false; } BOOST_ASSERT(stream_id != 0); control_bit = (boost::uint8_t)frame.control_bit; // There is a possibility that there are more than one SPDY frames in one TCP frame if(length_packet > frame.length){ m_current_data_chunk_ptr = m_read_ptr + frame.length; length_packet -= frame.length; rc = boost::indeterminate; } if (!control_bit) { // Parse the data packet parse_spdy_data(ec, frame, stream_id, http_info); } /* Abort here if the version is too low. */ if (frame.version > MIN_SPDY_VERSION) { // Version less that min SPDY version, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Version Number"); set_error(ec, ERROR_INVALID_SPDY_VERSION); return false; } if(frame.type == SPDY_SYN_STREAM){ http_info.http_type = HTTP_REQUEST; }else if (frame.type == SPDY_SYN_REPLY){ http_info.http_type = HTTP_RESPONSE; }else if (frame.type == SPDY_DATA){ http_info.http_type = HTTP_DATA; } switch (frame.type) { case SPDY_SYN_STREAM: case SPDY_SYN_REPLY: case SPDY_HEADERS: parse_header_payload(ec, decompressor, frame, http_info, current_stream_count); break; case SPDY_RST_STREAM: parse_spdy_rst_stream(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_SETTINGS: parse_spdy_settings_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_PING: parse_spdy_ping_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_GOAWAY: parse_spdy_goaway_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_WINDOW_UPDATE: parse_spdy_window_update_frame(ec, frame); http_info.http_type = SPDY_CONTROL; break; case SPDY_CREDENTIAL: // We dont need to parse this for now http_info.http_type = SPDY_CONTROL; break; default: break; } if (ec) return false; m_last_data_chunk_ptr = m_read_ptr; m_read_ptr = m_current_data_chunk_ptr; return rc; } void parser::create_error_category(void) { static error_category_t UNIQUE_ERROR_CATEGORY; m_error_category_ptr = &UNIQUE_ERROR_CATEGORY; } bool parser::populate_frame(boost::system::error_code& ec, spdy_control_frame_info& frame, boost::uint32_t& length_packet, boost::uint32_t& stream_id, http_protocol_info& http_info) { // Get the control bit boost::uint8_t control_bit; boost::uint16_t byte_value = algorithm::to_uint16(m_read_ptr); control_bit = byte_value >> (sizeof(short) * CHAR_BIT - 1); frame.control_bit = (control_bit != 0); if(control_bit){ // Control bit is set; This is a control frame // Get the version number boost::uint16_t two_bytes = algorithm::to_uint16(m_read_ptr); frame.version = two_bytes & 0x7FFF; // Increment the read pointer m_read_ptr += 2; length_packet -= 2; http_info.data_offset +=2; // Get the type frame.type = algorithm::to_uint16(m_read_ptr); if (frame.type >= SPDY_INVALID) { // SPDY Frame is invalid // This is not a SPDY frame, throw an error PION_LOG_ERROR(m_logger, "Invalid SPDY Frame"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return false; } }else { // Control bit is not set; This is a data frame frame.type = SPDY_DATA; frame.version = 0; /* Version doesn't apply to DATA. */ // Get the stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; http_info.stream_id = stream_id; m_read_ptr +=2; http_info.data_offset +=2; length_packet -= 2; } // Increment the read pointer m_read_ptr += 2; length_packet -= 2; http_info.data_offset +=2; // Get the flags frame.flags = (boost::uint8_t)*m_read_ptr; // Increment the read pointer // Get the length boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); frame.length = four_bytes & 0xFFFFFF; // Increment the read pointer m_read_ptr += 4; length_packet -= 4; http_info.data_offset +=4; http_info.data_size = frame.length; if(control_bit){ four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; } return true; } void parser::parse_header_payload(boost::system::error_code &ec, decompressor_ptr& decompressor, const spdy_control_frame_info& frame, http_protocol_info& http_info, boost::uint32_t current_stream_count) { boost::uint32_t stream_id = 0; boost::uint32_t associated_stream_id; boost::uint32_t header_block_length = frame.length; // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; http_info.stream_id = stream_id; // Get SYN_STREAM-only fields. if (frame.type == SPDY_SYN_STREAM) { // Get associated stream ID. boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); associated_stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // The next bits are priority, unused, and slot. // Disregard these for now as we dont need them m_read_ptr +=2 ; } else if( frame.type == SPDY_SYN_REPLY || frame.type == SPDY_HEADERS ) { // Unused bits m_read_ptr +=2 ; } // Get our header block length. switch (frame.type) { case SPDY_SYN_STREAM: header_block_length -= 10; break; case SPDY_SYN_REPLY: case SPDY_HEADERS: // This is a very important distinction. // It should be 6 bytes for SPDYv2 and 4 bytes for SPDYv3. header_block_length -= 6; break; default: // Unhandled case. This should never happen. PION_LOG_ERROR(m_logger, "Invalid SPDY Frame Type"); set_error(ec, ERROR_INVALID_SPDY_FRAME); return; } // Decompress header block as necessary. m_uncompressed_ptr = decompressor->decompress(m_read_ptr, stream_id, frame, header_block_length); if (!m_uncompressed_ptr) { set_error(ec, ERROR_DECOMPRESSION); return; } // Now parse the name/value pairs // The number of name/value pairs is 16 bit SPDYv2 // and it is 32 bit in SPDYv3 // TBD : Add support for SPDYv3 boost::uint16_t num_name_val_pairs = algorithm::to_uint16(m_uncompressed_ptr); m_uncompressed_ptr += 2; std::string content_type = ""; std::string content_encoding = ""; for(boost::uint16_t count = 0; count < num_name_val_pairs; ++count){ // Get the length of the name boost::uint16_t length_name = algorithm::to_uint16(m_uncompressed_ptr); std::string name = ""; m_uncompressed_ptr += 2; { for(boost::uint16_t count = 0; count < length_name; ++count){ name.push_back(*(m_uncompressed_ptr+count)); } m_uncompressed_ptr += length_name; } // Get the length of the value boost::uint16_t length_value = algorithm::to_uint16(m_uncompressed_ptr); std::string value = ""; m_uncompressed_ptr += 2; { for(boost::uint16_t count = 0; count < length_value; ++count){ value.push_back(*(m_uncompressed_ptr+count)); } m_uncompressed_ptr += length_value; } // Save these headers http_info.http_headers.insert(std::make_pair(name, value)); } } void parser::parse_spdy_data(boost::system::error_code &ec, const spdy_control_frame_info& frame, boost::uint32_t stream_id, http_protocol_info& http_info) { // This marks the finish flag if (frame.flags & SPDY_FLAG_FIN){ http_info.last_chunk = true; } } void parser::parse_spdy_rst_stream(boost::system::error_code &ec, const spdy_control_frame_info& frame) { boost::uint32_t stream_id = 0; boost::uint32_t status_code = 0; // First complete the check for size and flag // The flag for RST frame should be 0, The length should be 8 if(frame.flags != 0 || frame.length != 8 ){ return; } // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // Get the status code status_code = algorithm::to_uint32(m_read_ptr); char const* const status_code_str = rst_stream_status(status_code); if(status_code_str){ PION_LOG_INFO(m_logger, "SPDY Status Code is : " << status_code_str); }else{ PION_LOG_INFO(m_logger, "SPDY RST Invalid status code : " << status_code); } } void parser::parse_spdy_ping_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // First complete the check for size // The length should be 4 always if(frame.length != 4){ return; } boost::uint32_t ping_id = 0; // Get the 32 bit ping id ping_id = algorithm::to_uint32(m_read_ptr); m_read_ptr += 4; PION_LOG_INFO(m_logger, "SPDY " << "Ping ID is : " << ping_id); } void parser::parse_spdy_settings_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // Can ignore this frame for our purposes } void parser::parse_spdy_goaway_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // First complete the check for size // The length should be 4 always if(frame.length != 4){ return; } boost::uint32_t last_good_stream_id = 0; boost::uint32_t status_code = 0; // Get the 31 bit stream id boost::uint32_t four_bytes = algorithm::to_uint32(m_read_ptr); last_good_stream_id = four_bytes & 0x7FFFFFFF; m_read_ptr += 4; // Get the status code status_code = algorithm::to_uint32(m_read_ptr); // Chek if there was an error if(status_code == 1){ PION_LOG_ERROR(m_logger, "There was a Protocol Error"); set_error(ec, ERROR_PROTOCOL_ERROR); return; }else if (status_code == 11) { PION_LOG_ERROR(m_logger, "There was an Internal Error"); set_error(ec, ERROR_INTERNAL_SPDY_ERROR); return; } PION_LOG_INFO(m_logger, "SPDY " << "Status Code is : " << status_code); } void parser::parse_spdy_window_update_frame(boost::system::error_code &ec, const spdy_control_frame_info& frame) { // TBD : Do we really need this for our purpose } } // end namespace spdy } // end namespace pion pion-5.0.6+dfsg.orig/src/admin_rights.cpp0000644000372000001440000001015112314121350017670 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #ifndef _MSC_VER #include #include #include #include #include #include #include #endif namespace pion { // begin namespace pion // static members of admin_rights const boost::int16_t admin_rights::ADMIN_USER_ID = 0; boost::mutex admin_rights::m_mutex; // admin_rights member functions #ifdef _MSC_VER admin_rights::admin_rights(bool use_log) : m_logger(PION_GET_LOGGER("pion.admin_rights")), m_lock(m_mutex), m_user_id(-1), m_has_rights(false), m_use_log(use_log) {} void admin_rights::release(void) {} long admin_rights::run_as_user(const std::string& user_name) { return -1; } long admin_rights::run_as_group(const std::string& group_name) { return -1; } long admin_rights::find_system_id(const std::string& name, const std::string& file) { return -1; } #else // NOT #ifdef _MSC_VER admin_rights::admin_rights(bool use_log) : m_logger(PION_GET_LOGGER("pion.admin_rights")), m_lock(m_mutex), m_user_id(-1), m_has_rights(false), m_use_log(use_log) { m_user_id = geteuid(); if ( seteuid(ADMIN_USER_ID) != 0 ) { if (m_use_log) PION_LOG_ERROR(m_logger, "Unable to upgrade to administrative rights"); m_lock.unlock(); return; } else { m_has_rights = true; if (m_use_log) PION_LOG_DEBUG(m_logger, "Upgraded to administrative rights"); } } void admin_rights::release(void) { if (m_has_rights) { if ( seteuid(m_user_id) == 0 ) { if (m_use_log) PION_LOG_DEBUG(m_logger, "Released administrative rights"); } else { if (m_use_log) PION_LOG_ERROR(m_logger, "Unable to release administrative rights"); } m_has_rights = false; m_lock.unlock(); } } long admin_rights::run_as_user(const std::string& user_name) { long user_id = find_system_id(user_name, "/etc/passwd"); if (user_id != -1) { if ( seteuid(user_id) != 0 ) user_id = -1; } else { user_id = geteuid(); } return user_id; } long admin_rights::run_as_group(const std::string& group_name) { long group_id = find_system_id(group_name, "/etc/group"); if (group_id != -1) { if ( setegid(group_id) != 0 ) group_id = -1; } else { group_id = getegid(); } return group_id; } long admin_rights::find_system_id(const std::string& name, const std::string& file) { // check if name is the system id const boost::regex just_numbers("\\d+"); if (boost::regex_match(name, just_numbers)) { return boost::lexical_cast(name); } // open system file std::ifstream system_file(file.c_str()); if (! system_file.is_open()) { return -1; } // find id in system file typedef boost::tokenizer > Tok; boost::char_separator sep(":"); std::string line; boost::int32_t system_id = -1; while (std::getline(system_file, line, '\n')) { Tok tokens(line, sep); Tok::const_iterator token_it = tokens.begin(); if (token_it != tokens.end() && *token_it == name) { // found line matching name if (++token_it != tokens.end() && ++token_it != tokens.end() && boost::regex_match(*token_it, just_numbers)) { // found id as third parameter system_id = boost::lexical_cast(*token_it); } break; } } return system_id; } #endif // #ifdef _MSC_VER } // end namespace pion pion-5.0.6+dfsg.orig/src/Makefile.am0000644000372000001440000000124312314121350016552 0ustar robertousers# -------------------------------- # pion automake configuration file # -------------------------------- AM_CPPFLAGS = -I../include lib_LTLIBRARIES = libpion.la libpion_la_SOURCES = \ admin_rights.cpp algorithm.cpp logger.cpp plugin.cpp process.cpp scheduler.cpp \ spdy_decompressor.cpp spdy_parser.cpp \ tcp_server.cpp tcp_timer.cpp \ http_auth.cpp http_basic_auth.cpp http_cookie_auth.cpp http_message.cpp \ http_parser.cpp http_plugin_server.cpp http_reader.cpp http_server.cpp \ http_types.cpp http_writer.cpp libpion_la_LDFLAGS = -no-undefined -release $(PION_LIBRARY_VERSION) libpion_la_LIBADD = @PION_EXTERNAL_LIBS@ EXTRA_DIST = *.vcxproj *.vcxproj.filters pion-5.0.6+dfsg.orig/src/http_auth.cpp0000644000372000001440000000566612314121350017237 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // auth member functions void auth::add_restrict(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(http::server::strip_trailing_slash(resource)); m_restrict_list.insert(clean_resource); PION_LOG_INFO(m_logger, "Set authentication restrictions for HTTP resource: " << clean_resource); } void auth::add_permit(const std::string& resource) { boost::mutex::scoped_lock resource_lock(m_resource_mutex); const std::string clean_resource(http::server::strip_trailing_slash(resource)); m_white_list.insert(clean_resource); PION_LOG_INFO(m_logger, "Set authentication permission for HTTP resource: " << clean_resource); } bool auth::need_authentication(const http::request_ptr& http_request_ptr) const { // if no users are defined, authentication is never required if (m_user_manager->empty()) return false; // strip off trailing slash if the request has one std::string resource(http::server::strip_trailing_slash(http_request_ptr->get_resource())); boost::mutex::scoped_lock resource_lock(m_resource_mutex); // just return false if restricted list is empty if (m_restrict_list.empty()) return false; // try to find resource in restricted list if (find_resource(m_restrict_list, resource)) { // return true if white list is empty if (m_white_list.empty()) return true; // return false if found in white list, or true if not found return ( ! find_resource(m_white_list, resource) ); } // resource not found in restricted list return false; } bool auth::find_resource(const resource_set_type& resource_set, const std::string& resource) const { resource_set_type::const_iterator i = resource_set.upper_bound(resource); while (i != resource_set.begin()) { --i; // check for a match if the first part of the strings match if (i->empty() || resource.compare(0, i->size(), *i) == 0) { // only if the resource matches exactly // or if resource is followed first with a '/' character if (resource.size() == i->size() || resource[i->size()]=='/') { return true; } } } return false; } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/src/pion.vcxproj0000644000372000001440000004302612314121350017105 0ustar robertousers Debug_DLL_full Win32 Debug_DLL_full x64 Debug_static Win32 Debug_static x64 Release_DLL_full Win32 Release_DLL_full x64 Release_static Win32 Release_static x64 {61F4B4D5-3608-4264-9F4B-B0DA3E3FDF62} pion-net Win32Proj DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary DynamicLibrary DynamicLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.40219.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp _LIB;%(PreprocessorDefinitions) Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 _LIB;%(PreprocessorDefinitions) ProgramDatabase Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp _LIB;%(PreprocessorDefinitions) MultiThreadedDLL Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 _LIB;%(PreprocessorDefinitions) MultiThreadedDLL Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) ProgramDatabase false MachineX64 Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false zdll.lib;%(AdditionalDependencies) Copying config.hpp.win ->config.hpp copy /Y $(SolutionDir)include\pion\config.hpp.win $(SolutionDir)include\pion\config.hpp X64 PION_EXPORTS;PION_FULL;_USRDLL;%(PreprocessorDefinitions) false MachineX64 zdll.lib;%(AdditionalDependencies) pion-5.0.6+dfsg.orig/src/http_basic_auth.cpp0000644000372000001440000001333012314121350020363 0ustar robertousers// --------------------------------------------------------------------- // pion: a Boost C++ framework for building lightweight HTTP interfaces // --------------------------------------------------------------------- // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) // // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // #include #include #include #include #include namespace pion { // begin namespace pion namespace http { // begin namespace http // static members of basic_auth const unsigned int basic_auth::CACHE_EXPIRATION = 300; // 5 minutes // basic_auth member functions basic_auth::basic_auth(user_manager_ptr userManager, const std::string& realm) : http::auth(userManager), m_realm(realm), m_cache_cleanup_time(boost::posix_time::second_clock::universal_time()) { set_logger(PION_GET_LOGGER("pion.http.basic_auth")); } bool basic_auth::handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { if (!need_authentication(http_request_ptr)) { return true; // this request does not require authentication } boost::posix_time::ptime time_now(boost::posix_time::second_clock::universal_time()); if (time_now > m_cache_cleanup_time + boost::posix_time::seconds(CACHE_EXPIRATION)) { // expire cache boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator i; user_cache_type::iterator next=m_user_cache.begin(); while (next!=m_user_cache.end()) { i=next; ++next; if (time_now > i->second.first + boost::posix_time::seconds(CACHE_EXPIRATION)) { // ok - this is an old record.. expire it now m_user_cache.erase(i); } } m_cache_cleanup_time = time_now; } // if we are here, we need to check if access authorized... std::string authorization = http_request_ptr->get_header(http::types::HEADER_AUTHORIZATION); if (!authorization.empty()) { std::string credentials; if (parse_authorization(authorization, credentials)) { // to do - use fast cache to match with active credentials boost::mutex::scoped_lock cache_lock(m_cache_mutex); user_cache_type::iterator user_cache_ptr=m_user_cache.find(credentials); if (user_cache_ptr!=m_user_cache.end()) { // we found the credentials in our cache... // we can approve authorization now! http_request_ptr->set_user(user_cache_ptr->second.second); user_cache_ptr->second.first = time_now; return true; } std::string username; std::string password; if (parse_credentials(credentials, username, password)) { // match username/password user_ptr user=m_user_manager->get_user(username, password); if (user) { // add user to the cache m_user_cache.insert(std::make_pair(credentials, std::make_pair(time_now, user))); // add user credentials to the request object http_request_ptr->set_user(user); return true; } } } } // user not found handle_unauthorized(http_request_ptr, tcp_conn); return false; } void basic_auth::set_option(const std::string& name, const std::string& value) { if (name=="realm") m_realm = value; else BOOST_THROW_EXCEPTION( error::bad_arg() << error::errinfo_arg_name(name) ); } bool basic_auth::parse_authorization(const std::string& authorization, std::string &credentials) { if (!boost::algorithm::starts_with(authorization, "Basic ")) return false; credentials = authorization.substr(6); if (credentials.empty()) return false; return true; } bool basic_auth::parse_credentials(const std::string &credentials, std::string &username, std::string &password) { std::string user_password; if (! algorithm::base64_decode(credentials, user_password)) return false; // find ':' symbol std::string::size_type i = user_password.find(':'); if (i==0 || i==std::string::npos) return false; username = user_password.substr(0, i); password = user_password.substr(i+1); return true; } void basic_auth::handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // authentication failed, send 401..... static const std::string CONTENT = " " "" "" "Error" "" "" "

401 Unauthorized.

" " "; http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_status_code(http::types::RESPONSE_CODE_UNAUTHORIZED); writer->get_response().set_status_message(http::types::RESPONSE_MESSAGE_UNAUTHORIZED); writer->get_response().add_header("WWW-Authenticate", "Basic realm=\"" + m_realm + "\""); writer->write_no_copy(CONTENT); writer->send(); } } // end namespace http } // end namespace pion pion-5.0.6+dfsg.orig/index.html0000644000372000001440000000077612314121350015736 0ustar robertousers Boost.Name Documentation Automatic redirection failed, please go to doc/html/index.html pion-5.0.6+dfsg.orig/configure0000755000372000001440000253715112314121375015663 0ustar robertousers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for pion 5.0.6. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='pion' PACKAGE_TARNAME='pion' PACKAGE_VERSION='5.0.6' PACKAGE_STRING='pion 5.0.6' PACKAGE_BUGREPORT='pion-users@lists.sourceforge.net' ac_unique_file="src/algorithm.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS PION_EXTERNAL_LIBS PION_LOG_LIB PION_SSL_LIB PION_BZLIB PION_ZLIB PION_CYGWIN_DIRECTORY PION_LIBRARY_VERSION PION_TESTS_CPPFLAGS PION_TESTS_MAKEDIRS BOOST_TEST_LIB BOOST_REGEX_LIB BOOST_FILESYSTEM_LIB BOOST_THREAD_LIB BOOST_SYSTEM_LIB BOOST_DATE_TIME_LIB BOOST_LIB_EXTENSION BOOST_LDFLAGS BOOST_CPPFLAGS BOOST_HOME_DIR PION_PLUGINS_DIRECTORY PION_DLOPEN_LIBS CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX DOXYGEN_PAPER_SIZE DX_COND_latex_FALSE DX_COND_latex_TRUE DX_COND_pdf_FALSE DX_COND_pdf_TRUE DX_PDFLATEX DX_FLAG_pdf DX_COND_ps_FALSE DX_COND_ps_TRUE DX_EGREP DX_DVIPS DX_MAKEINDEX DX_LATEX DX_FLAG_ps DX_COND_html_FALSE DX_COND_html_TRUE DX_FLAG_html DX_COND_chi_FALSE DX_COND_chi_TRUE DX_FLAG_chi DX_COND_chm_FALSE DX_COND_chm_TRUE DX_HHC DX_FLAG_chm DX_COND_xml_FALSE DX_COND_xml_TRUE DX_FLAG_xml DX_COND_rtf_FALSE DX_COND_rtf_TRUE DX_FLAG_rtf DX_COND_man_FALSE DX_COND_man_TRUE DX_FLAG_man DX_COND_dot_FALSE DX_COND_dot_TRUE DX_DOT DX_FLAG_dot DX_COND_doc_FALSE DX_COND_doc_TRUE DX_PERL DX_DOXYGEN DX_FLAG_doc DX_ENV DX_DOCDIR DX_CONFIG DX_PROJECT CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_doxygen_doc enable_doxygen_dot enable_doxygen_man enable_doxygen_rtf enable_doxygen_xml enable_doxygen_chm enable_doxygen_chi enable_doxygen_html enable_doxygen_ps enable_doxygen_pdf with_arch with_cpu with_debug with_plugins with_boost with_boost_extension enable_tests with_cygwin with_zlib with_bzlib with_openssl enable_logging with_ostream_logging with_log4cplus with_log4cxx with_log4cpp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP DOXYGEN_PAPER_SIZE CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures pion 5.0.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/pion] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of pion 5.0.6:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-doxygen-doc don't generate any doxygen documentation --enable-doxygen-dot generate graphics for doxygen documentation --enable-doxygen-man generate doxygen manual pages --enable-doxygen-rtf generate doxygen RTF documentation --enable-doxygen-xml generate doxygen XML documentation --enable-doxygen-chm generate doxygen compressed HTML help documentation --enable-doxygen-chi generate doxygen seperate compressed HTML help index file --disable-doxygen-html don't generate doxygen plain HTML documentation --enable-doxygen-ps generate doxygen PostScript documentation --enable-doxygen-pdf generate doxygen PDF documentation --disable-tests do not build and run the unit tests --disable-logging disable all logging support (including std::ostream) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-arch[=LIST] specify comma-separated list of OSX architectures --with-cpu[=MARCH] specify specific CPU architecture for gcc --with-debug build with debugging information --with-plugins[=DIR] directory where Pion Plug-ins are installed --with-boost[=DIR] use boost (default is yes) - it is possible to specify the root directory for boost (optional) --with-boost-extension[=EXT] extension used for boost library files --with-cygwin[=DIR] directory where cygwin is installed (Windows only) --with-zlib[=DIR] location of zlib library (for gzip compression); use --without-zlib to disable --with-bzlib[=DIR] location of bzlib library (for bzip2 compression); use --without-bzlib to disable --with-openssl[=DIR] location of OpenSSL library (enables SSL support); use --without-openssl to disable --with-ostream-logging use std::ostream logging instead of library --with-log4cplus[=DIR] location of log4cplus library (recommended) --with-log4cxx[=DIR] location of log4cxx library --with-log4cpp[=DIR] location of log4cpp library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor DOXYGEN_PAPER_SIZE a4wide (default), a4, letter, legal or executive CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF pion configure 5.0.6 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by pion $as_me 5.0.6, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize some other things ac_aux_dir= for ac_dir in m4 "$srcdir"/m4; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in m4 \"$srcdir\"/m4" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in m4 \"$srcdir\"/m4" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # package and version args are now taken from AC_INIT() am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;} { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} { (exit 1); exit 1; }; };; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='pion' VERSION='5.0.6' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Use "silent mode" for less verbose build commands in automake 1.11+ # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac AM_BACKSLASH='\' # Needed to set per-target compilation flags DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<\_ACEOF #define NO_MINUS_C_MINUS_O 1 _ACEOF fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi # Setup libtool # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AS+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:$LINENO: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump enable_dlopen=yes case `pwd` in *\ * | *\ *) { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" { $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed $as_unset ac_script || ac_script= if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:4978: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:4981: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:4984: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:$LINENO: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6187 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_cc_needs_belf=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_cv_ld_exported_symbols_list=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_ld_exported_symbols_list=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:$LINENO: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:$LINENO: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8040: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8044: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8379: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8383: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8484: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8488: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8539: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8543: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat >conftest.$ac_ext <<_ACEOF int foo(void) {} _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then shlibpath_overrides_runpath=yes fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 $as_echo_n "checking for shl_load... " >&6; } if test "${ac_cv_func_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 $as_echo "$ac_cv_func_shl_load" >&6; } if test "x$ac_cv_func_shl_load" = x""yes; then lt_cv_dlopen="shl_load" else { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_shl_load=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 $as_echo_n "checking for dlopen... " >&6; } if test "${ac_cv_func_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dlopen || defined __stub___dlopen choke me #endif int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_func_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 $as_echo "$ac_cv_func_dlopen" >&6; } if test "x$ac_cv_func_dlopen" = x""yes; then lt_cv_dlopen="dlopen" else { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dl_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_svld_dlopen=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_dld_dld_link=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11342 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11438 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Setup doxygen support # Files: DX_PROJECT=pion DX_CONFIG=doc/Doxyfile DX_DOCDIR=doc # Environment variables used inside doxygen.cfg: DX_ENV="$DX_ENV SRCDIR='$srcdir'" DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'" DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" # Doxygen itself: # Check whether --enable-doxygen-doc was given. if test "${enable_doxygen_doc+set}" = set; then enableval=$enable_doxygen_doc; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_doc=1 ;; #( n|N|no|No|NO) DX_FLAG_doc=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-doc" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-doc" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_doc=1 fi if test "$DX_FLAG_doc" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. set dummy ${ac_tool_prefix}doxygen; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DOXYGEN+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN if test -n "$DX_DOXYGEN"; then { $as_echo "$as_me:$LINENO: result: $DX_DOXYGEN" >&5 $as_echo "$DX_DOXYGEN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOXYGEN"; then ac_pt_DX_DOXYGEN=$DX_DOXYGEN # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DOXYGEN+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN if test -n "$ac_pt_DX_DOXYGEN"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DOXYGEN" >&5 $as_echo "$ac_pt_DX_DOXYGEN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOXYGEN" = x; then DX_DOXYGEN="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOXYGEN=$ac_pt_DX_DOXYGEN fi else DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" fi if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then { $as_echo "$as_me:$LINENO: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 $as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_doc=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. set dummy ${ac_tool_prefix}perl; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_PERL+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PERL=$ac_cv_path_DX_PERL if test -n "$DX_PERL"; then { $as_echo "$as_me:$LINENO: result: $DX_PERL" >&5 $as_echo "$DX_PERL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PERL"; then ac_pt_DX_PERL=$DX_PERL # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_PERL+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL if test -n "$ac_pt_DX_PERL"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_PERL" >&5 $as_echo "$ac_pt_DX_PERL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_PERL" = x; then DX_PERL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PERL=$ac_pt_DX_PERL fi else DX_PERL="$ac_cv_path_DX_PERL" fi if test "$DX_FLAG_doc$DX_PERL" = 1; then { $as_echo "$as_me:$LINENO: WARNING: perl not found - will not generate any doxygen documentation" >&5 $as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_doc=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_doc" = 1; then if :; then DX_COND_doc_TRUE= DX_COND_doc_FALSE='#' else DX_COND_doc_TRUE='#' DX_COND_doc_FALSE= fi DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" : else if false; then DX_COND_doc_TRUE= DX_COND_doc_FALSE='#' else DX_COND_doc_TRUE='#' DX_COND_doc_FALSE= fi : fi # Dot for graphics: # Check whether --enable-doxygen-dot was given. if test "${enable_doxygen_dot+set}" = set; then enableval=$enable_doxygen_dot; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_dot=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-dot requires doxygen-dot" >&5 $as_echo "$as_me: error: doxygen-dot requires doxygen-dot" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_dot=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-dot" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-dot" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_dot=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_dot" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. set dummy ${ac_tool_prefix}dot; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DOT+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DOT=$ac_cv_path_DX_DOT if test -n "$DX_DOT"; then { $as_echo "$as_me:$LINENO: result: $DX_DOT" >&5 $as_echo "$DX_DOT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DOT"; then ac_pt_DX_DOT=$DX_DOT # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DOT+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DOT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT if test -n "$ac_pt_DX_DOT"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DOT" >&5 $as_echo "$ac_pt_DX_DOT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DOT" = x; then DX_DOT="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DOT=$ac_pt_DX_DOT fi else DX_DOT="$ac_cv_path_DX_DOT" fi if test "$DX_FLAG_dot$DX_DOT" = 1; then { $as_echo "$as_me:$LINENO: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 $as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_dot=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_dot" = 1; then if :; then DX_COND_dot_TRUE= DX_COND_dot_FALSE='#' else DX_COND_dot_TRUE='#' DX_COND_dot_FALSE= fi DX_ENV="$DX_ENV HAVE_DOT='YES'" DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" : else if false; then DX_COND_dot_TRUE= DX_COND_dot_FALSE='#' else DX_COND_dot_TRUE='#' DX_COND_dot_FALSE= fi DX_ENV="$DX_ENV HAVE_DOT='NO'" : fi # Man pages generation: # Check whether --enable-doxygen-man was given. if test "${enable_doxygen_man+set}" = set; then enableval=$enable_doxygen_man; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_man=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-man requires doxygen-man" >&5 $as_echo "$as_me: error: doxygen-man requires doxygen-man" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_man=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-man" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-man" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_man=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_man" = 1; then : fi if test "$DX_FLAG_man" = 1; then if :; then DX_COND_man_TRUE= DX_COND_man_FALSE='#' else DX_COND_man_TRUE='#' DX_COND_man_FALSE= fi DX_ENV="$DX_ENV GENERATE_MAN='YES'" : else if false; then DX_COND_man_TRUE= DX_COND_man_FALSE='#' else DX_COND_man_TRUE='#' DX_COND_man_FALSE= fi DX_ENV="$DX_ENV GENERATE_MAN='NO'" : fi # RTF file generation: # Check whether --enable-doxygen-rtf was given. if test "${enable_doxygen_rtf+set}" = set; then enableval=$enable_doxygen_rtf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_rtf=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-rtf requires doxygen-rtf" >&5 $as_echo "$as_me: error: doxygen-rtf requires doxygen-rtf" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_rtf=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-rtf" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-rtf" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_rtf=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_rtf" = 1; then : fi if test "$DX_FLAG_rtf" = 1; then if :; then DX_COND_rtf_TRUE= DX_COND_rtf_FALSE='#' else DX_COND_rtf_TRUE='#' DX_COND_rtf_FALSE= fi DX_ENV="$DX_ENV GENERATE_RTF='YES'" : else if false; then DX_COND_rtf_TRUE= DX_COND_rtf_FALSE='#' else DX_COND_rtf_TRUE='#' DX_COND_rtf_FALSE= fi DX_ENV="$DX_ENV GENERATE_RTF='NO'" : fi # XML file generation: # Check whether --enable-doxygen-xml was given. if test "${enable_doxygen_xml+set}" = set; then enableval=$enable_doxygen_xml; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_xml=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-xml requires doxygen-xml" >&5 $as_echo "$as_me: error: doxygen-xml requires doxygen-xml" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_xml=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-xml" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-xml" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_xml=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_xml" = 1; then : fi if test "$DX_FLAG_xml" = 1; then if :; then DX_COND_xml_TRUE= DX_COND_xml_FALSE='#' else DX_COND_xml_TRUE='#' DX_COND_xml_FALSE= fi DX_ENV="$DX_ENV GENERATE_XML='YES'" : else if false; then DX_COND_xml_TRUE= DX_COND_xml_FALSE='#' else DX_COND_xml_TRUE='#' DX_COND_xml_FALSE= fi DX_ENV="$DX_ENV GENERATE_XML='NO'" : fi # (Compressed) HTML help generation: # Check whether --enable-doxygen-chm was given. if test "${enable_doxygen_chm+set}" = set; then enableval=$enable_doxygen_chm; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chm=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-chm requires doxygen-chm" >&5 $as_echo "$as_me: error: doxygen-chm requires doxygen-chm" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_chm=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-chm" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-chm" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_chm=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_chm" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. set dummy ${ac_tool_prefix}hhc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_HHC+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_HHC=$ac_cv_path_DX_HHC if test -n "$DX_HHC"; then { $as_echo "$as_me:$LINENO: result: $DX_HHC" >&5 $as_echo "$DX_HHC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_HHC"; then ac_pt_DX_HHC=$DX_HHC # Extract the first word of "hhc", so it can be a program name with args. set dummy hhc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_HHC+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_HHC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC if test -n "$ac_pt_DX_HHC"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_HHC" >&5 $as_echo "$ac_pt_DX_HHC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_HHC" = x; then DX_HHC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_HHC=$ac_pt_DX_HHC fi else DX_HHC="$ac_cv_path_DX_HHC" fi if test "$DX_FLAG_chm$DX_HHC" = 1; then { $as_echo "$as_me:$LINENO: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 $as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_chm=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_chm" = 1; then if :; then DX_COND_chm_TRUE= DX_COND_chm_FALSE='#' else DX_COND_chm_TRUE='#' DX_COND_chm_FALSE= fi DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" DX_ENV="$DX_ENV GENERATE_HTML='YES'" DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" : else if false; then DX_COND_chm_TRUE= DX_COND_chm_FALSE='#' else DX_COND_chm_TRUE='#' DX_COND_chm_FALSE= fi DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" : fi # Seperate CHI file generation. # Check whether --enable-doxygen-chi was given. if test "${enable_doxygen_chi+set}" = set; then enableval=$enable_doxygen_chi; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_chi=1 test "$DX_FLAG_chm" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-chi requires doxygen-chi" >&5 $as_echo "$as_me: error: doxygen-chi requires doxygen-chi" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_chi=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-chi" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-chi" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_chi=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 #test "$DX_FLAG_chm" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_chi" = 1; then : fi if test "$DX_FLAG_chi" = 1; then if :; then DX_COND_chi_TRUE= DX_COND_chi_FALSE='#' else DX_COND_chi_TRUE='#' DX_COND_chi_FALSE= fi DX_ENV="$DX_ENV GENERATE_CHI='YES'" : else if false; then DX_COND_chi_TRUE= DX_COND_chi_FALSE='#' else DX_COND_chi_TRUE='#' DX_COND_chi_FALSE= fi DX_ENV="$DX_ENV GENERATE_CHI='NO'" : fi # Plain HTML pages generation: # Check whether --enable-doxygen-html was given. if test "${enable_doxygen_html+set}" = set; then enableval=$enable_doxygen_html; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_html=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-html requires doxygen-html" >&5 $as_echo "$as_me: error: doxygen-html requires doxygen-html" >&2;} { (exit 1); exit 1; }; } test "$DX_FLAG_chm" = "0" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-html contradicts doxygen-html" >&5 $as_echo "$as_me: error: doxygen-html contradicts doxygen-html" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_html=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-html" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-html" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_html=1 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 #test "$DX_FLAG_chm" = "0" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_html" = 1; then : fi if test "$DX_FLAG_html" = 1; then if :; then DX_COND_html_TRUE= DX_COND_html_FALSE='#' else DX_COND_html_TRUE='#' DX_COND_html_FALSE= fi DX_ENV="$DX_ENV GENERATE_HTML='YES'" : else if false; then DX_COND_html_TRUE= DX_COND_html_FALSE='#' else DX_COND_html_TRUE='#' DX_COND_html_FALSE= fi test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" : fi # PostScript file generation: # Check whether --enable-doxygen-ps was given. if test "${enable_doxygen_ps+set}" = set; then enableval=$enable_doxygen_ps; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_ps=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-ps requires doxygen-ps" >&5 $as_echo "$as_me: error: doxygen-ps requires doxygen-ps" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_ps=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-ps" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-ps" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_ps=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_ps" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. set dummy ${ac_tool_prefix}latex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_LATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_LATEX=$ac_cv_path_DX_LATEX if test -n "$DX_LATEX"; then { $as_echo "$as_me:$LINENO: result: $DX_LATEX" >&5 $as_echo "$DX_LATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_LATEX"; then ac_pt_DX_LATEX=$DX_LATEX # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_LATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_LATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX if test -n "$ac_pt_DX_LATEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_LATEX" >&5 $as_echo "$ac_pt_DX_LATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_LATEX" = x; then DX_LATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_LATEX=$ac_pt_DX_LATEX fi else DX_LATEX="$ac_cv_path_DX_LATEX" fi if test "$DX_FLAG_ps$DX_LATEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $DX_MAKEINDEX" >&5 $as_echo "$DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_MAKEINDEX" >&5 $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. set dummy ${ac_tool_prefix}dvips; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_DVIPS+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_DVIPS=$ac_cv_path_DX_DVIPS if test -n "$DX_DVIPS"; then { $as_echo "$as_me:$LINENO: result: $DX_DVIPS" >&5 $as_echo "$DX_DVIPS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_DVIPS"; then ac_pt_DX_DVIPS=$DX_DVIPS # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_DVIPS+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_DVIPS in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS if test -n "$ac_pt_DX_DVIPS"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_DVIPS" >&5 $as_echo "$ac_pt_DX_DVIPS" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_DVIPS" = x; then DX_DVIPS="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_DVIPS=$ac_pt_DX_DVIPS fi else DX_DVIPS="$ac_cv_path_DX_DVIPS" fi if test "$DX_FLAG_ps$DX_DVIPS" = 1; then { $as_echo "$as_me:$LINENO: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $DX_EGREP" >&5 $as_echo "$DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_EGREP" >&5 $as_echo "$ac_pt_DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_ps$DX_EGREP" = 1; then { $as_echo "$as_me:$LINENO: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_ps=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_ps" = 1; then if :; then DX_COND_ps_TRUE= DX_COND_ps_FALSE='#' else DX_COND_ps_TRUE='#' DX_COND_ps_FALSE= fi : else if false; then DX_COND_ps_TRUE= DX_COND_ps_FALSE='#' else DX_COND_ps_TRUE='#' DX_COND_ps_FALSE= fi : fi # PDF file generation: # Check whether --enable-doxygen-pdf was given. if test "${enable_doxygen_pdf+set}" = set; then enableval=$enable_doxygen_pdf; case "$enableval" in #( y|Y|yes|Yes|YES) DX_FLAG_pdf=1 test "$DX_FLAG_doc" = "1" \ || { { $as_echo "$as_me:$LINENO: error: doxygen-pdf requires doxygen-pdf" >&5 $as_echo "$as_me: error: doxygen-pdf requires doxygen-pdf" >&2;} { (exit 1); exit 1; }; } ;; #( n|N|no|No|NO) DX_FLAG_pdf=0 ;; #( *) { { $as_echo "$as_me:$LINENO: error: invalid value '$enableval' given to doxygen-pdf" >&5 $as_echo "$as_me: error: invalid value '$enableval' given to doxygen-pdf" >&2;} { (exit 1); exit 1; }; } ;; esac else DX_FLAG_pdf=0 # Fixing for autoconf 2.59 and above -- TaO090102 test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 #test "$DX_FLAG_doc" = "1" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test "$DX_FLAG_pdf" = 1; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_PDFLATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX if test -n "$DX_PDFLATEX"; then { $as_echo "$as_me:$LINENO: result: $DX_PDFLATEX" >&5 $as_echo "$DX_PDFLATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_PDFLATEX"; then ac_pt_DX_PDFLATEX=$DX_PDFLATEX # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_PDFLATEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX if test -n "$ac_pt_DX_PDFLATEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_PDFLATEX" >&5 $as_echo "$ac_pt_DX_PDFLATEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_PDFLATEX" = x; then DX_PDFLATEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_PDFLATEX=$ac_pt_DX_PDFLATEX fi else DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" fi if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. set dummy ${ac_tool_prefix}makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX if test -n "$DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $DX_MAKEINDEX" >&5 $as_echo "$DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_MAKEINDEX"; then ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX # Extract the first word of "makeindex", so it can be a program name with args. set dummy makeindex; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_MAKEINDEX in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX if test -n "$ac_pt_DX_MAKEINDEX"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_MAKEINDEX" >&5 $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_MAKEINDEX" = x; then DX_MAKEINDEX="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX fi else DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" fi if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then { $as_echo "$as_me:$LINENO: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. set dummy ${ac_tool_prefix}egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DX_EGREP=$ac_cv_path_DX_EGREP if test -n "$DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $DX_EGREP" >&5 $as_echo "$DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DX_EGREP"; then ac_pt_DX_EGREP=$DX_EGREP # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else case $ac_pt_DX_EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP if test -n "$ac_pt_DX_EGREP"; then { $as_echo "$as_me:$LINENO: result: $ac_pt_DX_EGREP" >&5 $as_echo "$ac_pt_DX_EGREP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DX_EGREP" = x; then DX_EGREP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DX_EGREP=$ac_pt_DX_EGREP fi else DX_EGREP="$ac_cv_path_DX_EGREP" fi if test "$DX_FLAG_pdf$DX_EGREP" = 1; then { $as_echo "$as_me:$LINENO: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} # Fixing for autoconf 2.59 and above -- TaO090102 DX_FLAG_pdf=0 # AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) fi : fi if test "$DX_FLAG_pdf" = 1; then if :; then DX_COND_pdf_TRUE= DX_COND_pdf_FALSE='#' else DX_COND_pdf_TRUE='#' DX_COND_pdf_FALSE= fi : else if false; then DX_COND_pdf_TRUE= DX_COND_pdf_FALSE='#' else DX_COND_pdf_TRUE='#' DX_COND_pdf_FALSE= fi : fi # LaTeX generation for PS and/or PDF: if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then if :; then DX_COND_latex_TRUE= DX_COND_latex_FALSE='#' else DX_COND_latex_TRUE='#' DX_COND_latex_FALSE= fi DX_ENV="$DX_ENV GENERATE_LATEX='YES'" else if false; then DX_COND_latex_TRUE= DX_COND_latex_FALSE='#' else DX_COND_latex_TRUE='#' DX_COND_latex_FALSE= fi DX_ENV="$DX_ENV GENERATE_LATEX='NO'" fi # Paper size for PS and/or PDF: case "$DOXYGEN_PAPER_SIZE" in #( "") DOXYGEN_PAPER_SIZE="" ;; #( a4wide|a4|letter|legal|executive) DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" ;; #( *) { { $as_echo "$as_me:$LINENO: error: unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" >&5 $as_echo "$as_me: error: unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" >&2;} { (exit 1); exit 1; }; } ;; esac #For debugging: #echo DX_FLAG_doc=$DX_FLAG_doc #echo DX_FLAG_dot=$DX_FLAG_dot #echo DX_FLAG_man=$DX_FLAG_man #echo DX_FLAG_html=$DX_FLAG_html #echo DX_FLAG_chm=$DX_FLAG_chm #echo DX_FLAG_chi=$DX_FLAG_chi #echo DX_FLAG_rtf=$DX_FLAG_rtf #echo DX_FLAG_xml=$DX_FLAG_xml #echo DX_FLAG_pdf=$DX_FLAG_pdf #echo DX_FLAG_ps=$DX_FLAG_ps #echo DX_ENV=$DX_ENV # Define CXXFLAGS before AC_PROG_CXX to suppress the default autoconf # compiler options CFLAGS="$CFLAGS -DPION" CXXFLAGS="$CXXFLAGS -DPION" # Include pion-config.inc # -------------------------------------- # pion-setup autoconf configuration file # -------------------------------------- # DO NOT USE autoheader (the .hpp.in file is not automanaged) AUTOHEADER="echo autoheader ignored" # Check for programs ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} _lt_caught_CXX_error=yes; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5]* | *pgcpp\ [1-5]*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 $as_echo "$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16734: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16738: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16833: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16837: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16885: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16889: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 $as_echo "$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then shlibpath_overrides_runpath=yes fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Use C++ language ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking for C++ compiler vendor" >&5 $as_echo_n "checking for C++ compiler vendor... " >&6; } if test "${ax_cv_cxx_compiler_vendor+set}" = set; then $as_echo_n "(cached) " >&6 else ax_cv_cxx_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ax_cv_cxx_compiler_vendor=`echo $ventest | cut -d: -f1`; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:$LINENO: result: $ax_cv_cxx_compiler_vendor" >&5 $as_echo "$ax_cv_cxx_compiler_vendor" >&6; } # library to link with for dlopen, etc. PION_DLOPEN_LIBS=$lt_cv_dlopen_libs # Set basic compiler options case "$build_os" in *solaris*) if test "$ax_cv_cxx_compiler_vendor" = "sun"; then # Solaris: Sun Studio C++ compiler CPPFLAGS="$CPPFLAGS -mt -library=stlport4" LDFLAGS="$LDFLAGS -mt -library=stlport4" PION_OPT_FLAGS="-O2 -DNDEBUG" PION_DEBUG_FLAGS="-g" else # Solaris: GCC compiler CPPFLAGS="$CPPFLAGS -pthreads -D_REENTRANT" LDFLAGS="$LDFLAGS -pthreads" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" fi PION_EXTERNAL_LIBS="-lsocket -lnsl -lposix4" ;; *darwin*) # Mac OS X: GCC compiler # -pthread is implied (automatically set by compiler) CPPFLAGS="$CPPFLAGS -D_REENTRANT" #LDFLAGS="$LDFLAGS" #PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -fno-tree-pre -falign-loops -Wall -Wno-strict-aliasing -DNDEBUG" PION_OPT_FLAGS="-O3 -ggdb -fomit-frame-pointer -fstrict-aliasing -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" # Check for OSX binary architecture { $as_echo "$as_me:$LINENO: checking for OSX binary architectures" >&5 $as_echo_n "checking for OSX binary architectures... " >&6; } # Check whether --with-arch was given. if test "${with_arch+set}" = set; then withval=$with_arch; with_arch=$withval else with_arch=default fi if test "$with_arch" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } elif test "$with_arch" = "default"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } # Note: Pion seems to crashe consistently when built with x86_64 # AC_MSG_RESULT(x86_64) # with_arch="-arch x86_64" # PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" # PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" else { $as_echo "$as_me:$LINENO: result: $with_arch" >&5 $as_echo "$with_arch" >&6; } with_arch="-arch `echo $with_arch | sed 's#,# -arch #g'`" PION_OPT_FLAGS="$PION_OPT_FLAGS $with_arch" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS $with_arch" fi ;; *cygwin*) # Cygwin GCC compiler (Windows) CPPFLAGS="$CPPFLAGS -mthreads -D_REENTRANT -DPION_WIN32 -D__USE_W32_SOCKETS" LDFLAGS="$LDFLAGS -mthreads -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" PION_EXTERNAL_LIBS="-lws2_32 -lmswsock" ;; *freebsd*) # FreeBSD: GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; *) # Other (Linux): GCC compiler CPPFLAGS="$CPPFLAGS -pthread -D_REENTRANT" LDFLAGS="$LDFLAGS -pthread -Wl,-E" LIBS="-lrt -ldl" PION_OPT_FLAGS="-O2 -ggdb -Wall -Wno-strict-aliasing -DNDEBUG" PION_DEBUG_FLAGS="-O0 -ggdb -Wall -Wno-strict-aliasing -fkeep-inline-functions" ;; esac # Check for --with-cpu (gcc CPU architecture) { $as_echo "$as_me:$LINENO: checking for specific CPU architecture" >&5 $as_echo_n "checking for specific CPU architecture... " >&6; } # Check whether --with-cpu was given. if test "${with_cpu+set}" = set; then withval=$with_cpu; with_cpu=$withval else with_cpu=default fi if test "$with_cpu" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } else if test "$with_cpu" = "default"; then if test "$with_arch" = "no" || test "$with_arch" = "default" ; then if test "$ax_cv_cxx_compiler_vendor" = "gnu"; then # check __x86_64__ to determine default cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #if defined(__x86_64__) // x86_64 defined -> leave undefined #else #error __x86_64__ not defined -> i686 #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 with_cpu="i686" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi fi if test "$with_cpu" = "default"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } else # check to make sure it works CFLAGS_SAVED=$CFLAGS CXXFLAGS_SAVED=$CXXFLAGS CFLAGS="$CFLAGS -march=$with_cpu" CXXFLAGS="$CXXFLAGS -march=$with_cpu" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: $with_cpu" >&5 $as_echo "$with_cpu" >&6; } PION_OPT_FLAGS="$PION_OPT_FLAGS -march=$with_cpu" PION_DEBUG_FLAGS="$PION_DEBUG_FLAGS -march=$with_cpu" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$CFLAGS_SAVED CXXFLAGS=$CXXFLAGS_SAVED fi fi # Check for debug { $as_echo "$as_me:$LINENO: checking for debugging" >&5 $as_echo_n "checking for debugging... " >&6; } # Check whether --with-debug was given. if test "${with_debug+set}" = set; then withval=$with_debug; with_debug=$withval else with_debug=no fi if test "$with_debug" = "no"; then { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } CFLAGS="$CFLAGS $PION_OPT_FLAGS" CXXFLAGS="$CXXFLAGS $PION_OPT_FLAGS" else { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS $PION_DEBUG_FLAGS" CXXFLAGS="$CXXFLAGS $PION_DEBUG_FLAGS" fi # Check for --with-plugins { $as_echo "$as_me:$LINENO: checking for plug-ins directory" >&5 $as_echo_n "checking for plug-ins directory... " >&6; } # Check whether --with-plugins was given. if test "${with_plugins+set}" = set; then withval=$with_plugins; with_plugins=$withval else with_plugins=no fi if test "$with_plugins" = "no"; then if test "x$prefix" = "xNONE"; then PION_PLUGINS_DIRECTORY=/usr/local/share/pion/plugins else PION_PLUGINS_DIRECTORY=${prefix}/share/pion/plugins fi else PION_PLUGINS_DIRECTORY=$with_plugins fi { $as_echo "$as_me:$LINENO: result: $PION_PLUGINS_DIRECTORY" >&5 $as_echo "$PION_PLUGINS_DIRECTORY" >&6; } cat >>confdefs.h <<_ACEOF #define PION_PLUGINS_DIRECTORY "$PION_PLUGINS_DIRECTORY" _ACEOF # -------------------------------- # Pion autoconf configuration file # -------------------------------- # Check for Boost # Check whether --with-boost was given. if test "${with_boost+set}" = set; then withval=$with_boost; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi else want_boost="yes" fi if test "x$want_boost" = "xyes"; then boost_lib_version_req=1.35 boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` { $as_echo "$as_me:$LINENO: checking for boostlib >= $boost_lib_version_req" >&5 $as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } succeeded=no if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" BOOST_CPPFLAGS="-I$ac_boost_path/include" else for ac_boost_path_tmp in /usr /usr/local /opt ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then BOOST_HOME_DIR="$ac_boost_path_tmp" BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then BOOST_HOME_DIR="$ac_boost_path" BOOST_LDFLAGS="-L$ac_boost_path/lib" if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else for ac_boost_path in /usr /usr/local /opt ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" BOOST_LDFLAGS="-L$best_path/lib" BOOST_HOME_DIR="$best_path" if test "x$BOOST_ROOT" != "x"; then if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" ; then { $as_echo "$as_me:$LINENO: We will use a staged boost library from $BOOST_ROOT" >&5 $as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then { { $as_echo "$as_me:$LINENO: error: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 $as_echo "$as_me: error: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&2;} { (exit 1); exit 1; }; } else { $as_echo "$as_me:$LINENO: Your boost libraries seems to old (version $_version)." >&5 $as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;} fi else cat >>confdefs.h <<\_ACEOF #define HAVE_BOOST /**/ _ACEOF fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi # AC_MSG_NOTICE(Boost home directory: $BOOST_HOME_DIR) CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" # Check for Boost library extension { $as_echo "$as_me:$LINENO: checking boost library extension" >&5 $as_echo_n "checking boost library extension... " >&6; } # Check whether --with-boost-extension was given. if test "${with_boost_extension+set}" = set; then withval=$with_boost_extension; boost_ext=$withval else detect_boost_ext=true fi # Check if openssl location is specified if test "$detect_boost_ext" != "true"; then # use provided extension for boost library files BOOST_LIB_EXTENSION="$boost_ext" else # Attempt to Autodetect Boost library extension by looking for thread library (i.e. "-gcc41-mt") for boost_thread_library in `ls $BOOST_HOME_DIR/lib*/libboost_thread*-mt*{dylib,dll,so,a}* 2>/dev/null` ; do if test -r $boost_thread_library ; then BOOST_LIB_EXTENSION=`echo $boost_thread_library | sed 's,.*/,,' | sed -e 's;^libboost_thread\(.*\)\.dylib.*$;\1;' -e 's;^libboost_thread\(.*\)\.dll*$;\1;' -e 's;^libboost_thread\(.*\)\.so.*$;\1;' -e 's;^libboost_thread\(.*\)\.a*$;\1;'` break fi done fi if test "x$BOOST_LIB_EXTENSION" = "x"; then { $as_echo "$as_me:$LINENO: result: \"(none)\"" >&5 $as_echo "\"(none)\"" >&6; } else { $as_echo "$as_me:$LINENO: result: $BOOST_LIB_EXTENSION" >&5 $as_echo "$BOOST_LIB_EXTENSION" >&6; } fi # Check for Boost Date Time library BOOST_TRY_LIB=date_time BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { boost::gregorian::date d(2007, 11, 11); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_DATE_TIME_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost System library BOOST_TRY_LIB=system BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { boost::system::error_code error_code; std::string message(error_code.message()); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_SYSTEM_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Thread library BOOST_TRY_LIB=thread BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} ${BOOST_SYSTEM_LIB} ${BOOST_DATE_TIME_LIB}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { boost::thread current_thread; return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_THREAD_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Filesystem library BOOST_TRY_LIB=filesystem BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK} $BOOST_SYSTEM_LIB" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { boost::filesystem::path a_path; return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_FILESYSTEM_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Regex library BOOST_TRY_LIB=regex BOOST_TRY_LINK="boost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -l${BOOST_TRY_LINK}" { $as_echo "$as_me:$LINENO: checking for boost::${BOOST_TRY_LIB} library" >&5 $as_echo_n "checking for boost::${BOOST_TRY_LIB} library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { boost::regex exp(".*"); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_REGEX_LIB="-l${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" # Check for Boost Unit Test Framework # Check whether --enable-tests was given. if test "${enable_tests+set}" = set; then enableval=$enable_tests; enable_tests=$enableval else enable_tests=yes fi if test "x$enable_tests" == "xno"; then # Display notice if unit tests are disabled { $as_echo "$as_me:$LINENO: Unit tests are disabled" >&5 $as_echo "$as_me: Unit tests are disabled" >&6;} else BOOST_TRY_LIB=unit_test_framework BOOST_TRY_LINK="$BOOST_HOME_DIR/lib/libboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}.a" # check if static version of lib is available if !(test -r "$BOOST_TRY_LINK"); then BOOST_TRY_LINK="-lboost_${BOOST_TRY_LIB}${BOOST_LIB_EXTENSION}" PION_TESTS_CPPFLAGS="-DBOOST_TEST_DYN_LINK" fi LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED ${BOOST_TRY_LINK}" CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS ${PION_TESTS_CPPFLAGS}" { $as_echo "$as_me:$LINENO: checking for boost::test library" >&5 $as_echo_n "checking for boost::test library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include using namespace boost::unit_test; test_suite* init_unit_test_suite( int argc, char* argv[] ) { return BOOST_TEST_SUITE("Master test suite"); } int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } BOOST_TEST_LIB="${BOOST_TRY_LINK}" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: not found" >&5 $as_echo "not found" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&5 $as_echo "$as_me: error: Unable to link with the boost::${BOOST_TRY_LIB} library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" CPPFLAGS="$CPPFLAGS_SAVED" PION_TESTS_MAKEDIRS="tests" fi # -------------------------------- # Pion autoconf configuration file # -------------------------------- # Set Pion version information PION_LIBRARY_VERSION=`echo $PACKAGE_VERSION | sed 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'` # AC_MSG_NOTICE("Pion Library Version: $PION_LIBRARY_VERSION") cat >>confdefs.h <<_ACEOF #define PION_VERSION "$PACKAGE_VERSION" _ACEOF # Note: AM_CONFIG_HEADER is deprecated ac_config_headers="$ac_config_headers include/pion/config.hpp" # Check for --with-cygwin { $as_echo "$as_me:$LINENO: checking for cygwin directory" >&5 $as_echo_n "checking for cygwin directory... " >&6; } # Check whether --with-cygwin was given. if test "${with_cygwin+set}" = set; then withval=$with_cygwin; with_cygwin=$withval else with_cygwin=maybe fi if test "$with_cygwin" = "maybe"; then case "$build_os" in *cygwin*) PION_CYGWIN_DIRECTORY="c:/cygwin" { $as_echo "$as_me:$LINENO: result: $PION_CYGWIN_DIRECTORY" >&5 $as_echo "$PION_CYGWIN_DIRECTORY" >&6; } ;; *) { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac elif test "$with_cygwin" != "no"; then PION_CYGWIN_DIRECTOR="$with_cygwin" { $as_echo "$as_me:$LINENO: result: $PION_CYGWIN_DIRECTORY" >&5 $as_echo "$PION_CYGWIN_DIRECTORY" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi cat >>confdefs.h <<_ACEOF #define PION_CYGWIN_DIRECTORY "$PION_CYGWIN_DIRECTORY" _ACEOF # Check for malloc_trim support { $as_echo "$as_me:$LINENO: checking for malloc_trim() support" >&5 $as_echo_n "checking for malloc_trim() support... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { malloc_trim(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_HAVE_MALLOC_TRIM 1 _ACEOF else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext # Check for unordered container support for ac_header in tr1/unordered_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=tr1_unordered_map fi done if test "x$unordered_map_type" = "xtr1_unordered_map"; then # test to make sure it's good enough { $as_echo "$as_me:$LINENO: checking if unordered_map is ok" >&5 $as_echo_n "checking if unordered_map is ok... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #if defined(__APPLE__) && (!defined(__apple_build_version__) || __apple_build_version__ < 5000000) #error completely broken on OSX, even for gcc 4.2 #elif !defined(__GNUC__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) return(0); #else #error only use gcc versions 4.1 or greater #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } unordered_map_type="" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi if test "x$unordered_map_type" = "x"; then for ac_header in ext/hash_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=ext_hash_map fi done fi if test "x$unordered_map_type" = "x"; then for ac_header in hash_map do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF unordered_map_type=hash_map fi done fi if test "$unordered_map_type" = "tr1_unordered_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_UNORDERED_MAP 1 _ACEOF elif test "$unordered_map_type" = "ext_hash_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_EXT_HASH_MAP 1 _ACEOF elif test "$unordered_map_type" = "hash_map"; then cat >>confdefs.h <<\_ACEOF #define PION_HAVE_HASH_MAP 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: C++ compiler does not seem to support unordered containers" >&5 $as_echo "$as_me: error: C++ compiler does not seem to support unordered containers" >&2;} { (exit 1); exit 1; }; } fi # Check for zlib { $as_echo "$as_me:$LINENO: checking for gzip compression support (zlib)" >&5 $as_echo_n "checking for gzip compression support (zlib)... " >&6; } # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then withval=$with_zlib; zlib_location=$withval else zlib_location=yes fi # Check if zlib location is specified if test "x_$zlib_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$zlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$zlib_location/include" LDFLAGS="$LDFLAGS -L$zlib_location/lib" fi # Check for zlib headers for ac_header in zlib.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the zlib headers" >&5 $as_echo "$as_me: error: Unable to find the zlib headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for zlib library LIBS="$LIBS_SAVED -lz" { $as_echo "$as_me:$LINENO: checking linking with zlib" >&5 $as_echo_n "checking linking with zlib... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { zlibVersion(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the zlib library" >&5 $as_echo "$as_me: error: Unable to link with the zlib library" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_ZLIB="-lz" # Found the zlib library cat >>confdefs.h <<\_ACEOF #define PION_HAVE_ZLIB 1 _ACEOF else # zlib is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for bzlib { $as_echo "$as_me:$LINENO: checking for bzip2 compression support (bzlib)" >&5 $as_echo_n "checking for bzip2 compression support (bzlib)... " >&6; } # Check whether --with-bzlib was given. if test "${with_bzlib+set}" = set; then withval=$with_bzlib; bzlib_location=$withval else bzlib_location=yes fi # Check if bzlib location is specified if test "x_$bzlib_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$bzlib_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$bzlib_location/include" LDFLAGS="$LDFLAGS -L$bzlib_location/lib" fi # Check for bzlib headers for ac_header in bzlib.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the bzlib headers" >&5 $as_echo "$as_me: error: Unable to find the bzlib headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for bzlib library LIBS="$LIBS_SAVED -lbz2" { $as_echo "$as_me:$LINENO: checking linking with bzlib" >&5 $as_echo_n "checking linking with bzlib... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { BZ2_bzlibVersion(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the bzlib library; use --without-bzlib to disable" >&5 $as_echo "$as_me: error: Unable to link with the bzlib library; use --without-bzlib to disable" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_BZLIB="-lbz2" # Found the bzlib library cat >>confdefs.h <<\_ACEOF #define PION_HAVE_BZLIB 1 _ACEOF else # bzlib is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for OpenSSL { $as_echo "$as_me:$LINENO: checking for SSL support (openssl)" >&5 $as_echo_n "checking for SSL support (openssl)... " >&6; } # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then withval=$with_openssl; openssl_location=$withval else openssl_location=yes fi # Check if openssl location is specified if test "x_$openssl_location" != "x_no"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } if test "x_$openssl_location" != "x_yes"; then # alternative location provided CPPFLAGS="$CPPFLAGS -I$openssl_location/include" LDFLAGS="$LDFLAGS -L$openssl_location/lib" fi # Check for OpenSSL headers for ac_header in openssl/ssl.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------------- ## ## Report this to pion-users@lists.sourceforge.net ## ## ----------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { $as_echo "$as_me:$LINENO: error: Unable to find the OpenSSL headers" >&5 $as_echo "$as_me: error: Unable to find the OpenSSL headers" >&2;} { (exit 1); exit 1; }; } fi done # Check for OpenSSL library LIBS_SAVED="$LIBS" LIBS="-lssl -lcrypto $LIBS_SAVED" { $as_echo "$as_me:$LINENO: checking linking with openssl" >&5 $as_echo_n "checking linking with openssl... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { SSL_library_init(); return(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: failed" >&5 $as_echo "failed" >&6; } { { $as_echo "$as_me:$LINENO: error: Unable to link with the openssl library; use --without-openssl to disable" >&5 $as_echo "$as_me: error: Unable to link with the openssl library; use --without-openssl to disable" >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" PION_SSL_LIB="-lssl -lcrypto" # Found the OpenSSL library { $as_echo "$as_me:$LINENO: Building Pion with support for SSL (using OpenSSL)" >&5 $as_echo "$as_me: Building Pion with support for SSL (using OpenSSL)" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_HAVE_SSL 1 _ACEOF else # SSL is disabled { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Check for logging support # Check whether --enable-logging was given. if test "${enable_logging+set}" = set; then enableval=$enable_logging; enable_logging=$enableval else enable_logging=yes fi # Check whether --with-ostream-logging was given. if test "${with_ostream_logging+set}" = set; then withval=$with_ostream_logging; ostream_logging=yes else ostream_logging=no fi # Check whether --with-log4cplus was given. if test "${with_log4cplus+set}" = set; then withval=$with_log4cplus; log4cplus_location=$withval without_log4cxx=true without_log4cpp=true fi # Check whether --with-log4cxx was given. if test "${with_log4cxx+set}" = set; then withval=$with_log4cxx; log4cxx_location=$withval without_log4cplus=true without_log4cpp=true fi # Check whether --with-log4cpp was given. if test "${with_log4cpp+set}" = set; then withval=$with_log4cpp; log4cpp_location=$withval without_log4cplus=true without_log4cxx=true fi if test "x$enable_logging" == "xno"; then # Display notice if no logging found { $as_echo "$as_me:$LINENO: Logging has been disabled" >&5 $as_echo "$as_me: Logging has been disabled" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_DISABLE_LOGGING 1 _ACEOF elif test "x$ostream_logging" == "xyes"; then { $as_echo "$as_me:$LINENO: Using std::ostream for logging" >&5 $as_echo "$as_me: Using std::ostream for logging" >&6;} cat >>confdefs.h <<\_ACEOF #define PION_USE_OSTREAM_LOGGING 1 _ACEOF else # check for an available logging library (log4cplus, then log4cxx, then log4cpp) # log4cplus if test "$without_log4cplus" != "true"; then # Check if log4cplus location is specified if test "x$log4cplus_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cplus_location/include" LDFLAGS="$LDFLAGS -L$log4cplus_location/lib" fi # Check for log4cplus library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cplus" { $as_echo "$as_me:$LINENO: checking log4cplus library" >&5 $as_echo_n "checking log4cplus library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { log4cplus::Logger::getRoot(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cplus library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CPLUS 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cplus for logging" >&5 $as_echo "$as_me: Using log4cplus for logging" >&6;} without_log4cxx=true without_log4cpp=true PION_LOG_LIB="-llog4cplus" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # log4cxx if test "$without_log4cxx" != "true"; then # Check if log4cxx location is specified if test "x$log4cxx_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cxx_location/include" LDFLAGS="$LDFLAGS -L$log4cxx_location/lib" fi # Check for log4cxx library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cxx" { $as_echo "$as_me:$LINENO: checking log4cxx library" >&5 $as_echo_n "checking log4cxx library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { log4cxx::Logger::getRootLogger(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cxx library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CXX 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cxx for logging" >&5 $as_echo "$as_me: Using log4cxx for logging" >&6;} without_log4cplus=true without_log4cpp=true PION_LOG_LIB="-llog4cxx" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # log4cpp if test "$without_log4cpp" != "true"; then # Check if log4cpp location is specified if test "x$log4cpp_location" != "xyes" then CPPFLAGS="$CPPFLAGS -I$log4cpp_location/include" LDFLAGS="$LDFLAGS -L$log4cpp_location/lib" fi # Check for log4cpp library LIBS_SAVED="$LIBS" LIBS="$LIBS_SAVED -llog4cpp" { $as_echo "$as_me:$LINENO: checking log4cpp library" >&5 $as_echo_n "checking log4cpp library... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { log4cpp::Category::getRoot(); return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then # Found the log4cpp library { $as_echo "$as_me:$LINENO: result: ok" >&5 $as_echo "ok" >&6; } cat >>confdefs.h <<\_ACEOF #define PION_USE_LOG4CPP 1 _ACEOF { $as_echo "$as_me:$LINENO: Using log4cpp for logging" >&5 $as_echo "$as_me: Using log4cpp for logging" >&6;} without_log4cplus=true without_log4cxx=true PION_LOG_LIB="-llog4cpp" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$LIBS_SAVED" fi # no log library found if test "x$PION_LOG_LIB" == "x"; then if test "x$ostream_logging" == "xno"; then { $as_echo "$as_me:$LINENO: WARNING: No logging library found - disabling logging" >&5 $as_echo "$as_me: WARNING: No logging library found - disabling logging" >&2;} cat >>confdefs.h <<\_ACEOF #define PION_DISABLE_LOGGING 1 _ACEOF else { $as_echo "$as_me:$LINENO: WARNING: No logging library found - using std::ostream for logging" >&5 $as_echo "$as_me: WARNING: No logging library found - using std::ostream for logging" >&2;} cat >>confdefs.h <<\_ACEOF #define PION_USE_OSTREAM_LOGGING 1 _ACEOF fi fi fi # Set external library dependencies PION_EXTERNAL_LIBS="$BOOST_THREAD_LIB $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_REGEX_LIB $BOOST_DATE_TIME_LIB $PION_LOG_LIB $PION_SSL_LIB $PION_ZLIB $PION_BZLIB $PION_EXTERNAL_LIBS" # Output Makefiles ac_config_files="$ac_config_files pion.pc Makefile include/Makefile include/pion/Makefile include/pion/tcp/Makefile include/pion/http/Makefile include/pion/test/Makefile include/pion/spdy/Makefile src/Makefile services/Makefile utils/Makefile tests/Makefile tests/plugins/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_doc\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_dot\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_man\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_rtf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_xml\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chm\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_chi\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_html\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_ps\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_pdf\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"DX_COND_latex\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by pion $as_me 5.0.6, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ pion config.status 5.0.6 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include/pion/config.hpp") CONFIG_HEADERS="$CONFIG_HEADERS include/pion/config.hpp" ;; "pion.pc") CONFIG_FILES="$CONFIG_FILES pion.pc" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/pion/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/Makefile" ;; "include/pion/tcp/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/tcp/Makefile" ;; "include/pion/http/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/http/Makefile" ;; "include/pion/test/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/test/Makefile" ;; "include/pion/spdy/Makefile") CONFIG_FILES="$CONFIG_FILES include/pion/spdy/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "services/Makefile") CONFIG_FILES="$CONFIG_FILES services/Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES tests/plugins/Makefile" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi pion-5.0.6+dfsg.orig/README.md0000644000372000001440000000454612314121350015217 0ustar robertousersPion Network Library ==================== C++ framework for building lightweight HTTP interfaces **Project Home:** https://github.com/splunk/pion Retrieving the code ------------------- git clone git@github.com:splunk/pion.git cd pion Building the code ----------------- *For XCode:* use `pion.xcodeproj` *For Visual Studio:* use `pion.sln` On Unix platforms (including Linux, OSX, etc.) you can run ./autogen.sh ./configure to generate Makefiles using GNU autotools, followed by make to build everything except the unit tests. You can build and run all the unit tests with make check Generate build using CMake --------------------------- [CMake](http://www.cmake.org) is cross-platform build generator. Pion required cmake version 2.8.10+ To generate build call cmake [-G ] [-D