(request).socket();
+ if (socket.havePeerCertificate())
+ {
+ X509Certificate cert = socket.peerCertificate();
+ app.logger().information("Client certificate: " + cert.subjectName());
+ }
+ else
+ {
+ app.logger().information("No client certificate available.");
+ }
+
+ Timestamp now;
+ std::string dt(DateTimeFormatter::format(now, _format));
+
+ response.setChunkedTransferEncoding(true);
+ response.setContentType("text/html");
+
+ std::ostream& ostr = response.send();
+ ostr << "HTTPTimeServer powered by POCO C++ Libraries";
+ ostr << "";
+ ostr << "";
+ ostr << dt;
+ ostr << "
";
+ }
+
+private:
+ std::string _format;
+};
+
+
+class TimeRequestHandlerFactory: public HTTPRequestHandlerFactory
+{
+public:
+ TimeRequestHandlerFactory(const std::string& format):
+ _format(format)
+ {
+ }
+
+ HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
+ {
+ if (request.getURI() == "/")
+ return new TimeRequestHandler(_format);
+ else
+ return 0;
+ }
+
+private:
+ std::string _format;
+};
+
+
+class HTTPSTimeServer: public Poco::Util::ServerApplication
+ /// The main application class.
+ ///
+ /// This class handles command-line arguments and
+ /// configuration files.
+ /// Start the HTTPTimeServer executable with the help
+ /// option (/help on Windows, --help on Unix) for
+ /// the available command line options.
+ ///
+ /// To use the sample configuration file (HTTPTimeServer.properties),
+ /// copy the file to the directory where the HTTPTimeServer executable
+ /// resides. If you start the debug version of the HTTPTimeServer
+ /// (HTTPTimeServerd[.exe]), you must also create a copy of the configuration
+ /// file named HTTPTimeServerd.properties. In the configuration file, you
+ /// can specify the port on which the server is listening (default
+ /// 9443) and the format of the date/time string sent back to the client.
+ ///
+ /// To test the TimeServer you can use any web browser (https://localhost:9443/).
+{
+public:
+ HTTPSTimeServer(): _helpRequested(false)
+ {
+ Poco::Net::initializeSSL();
+ }
+
+ ~HTTPSTimeServer()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+
+protected:
+ void initialize(Application& self)
+ {
+ loadConfiguration(); // load default configuration files, if present
+ ServerApplication::initialize(self);
+ }
+
+ void uninitialize()
+ {
+ ServerApplication::uninitialize();
+ }
+
+ void defineOptions(OptionSet& options)
+ {
+ ServerApplication::defineOptions(options);
+
+ options.addOption(
+ Option("help", "h", "display help information on command line arguments")
+ .required(false)
+ .repeatable(false));
+ }
+
+ void handleOption(const std::string& name, const std::string& value)
+ {
+ ServerApplication::handleOption(name, value);
+
+ if (name == "help")
+ _helpRequested = true;
+ }
+
+ void displayHelp()
+ {
+ HelpFormatter helpFormatter(options());
+ helpFormatter.setCommand(commandName());
+ helpFormatter.setUsage("OPTIONS");
+ helpFormatter.setHeader("A web server that serves the current date and time.");
+ helpFormatter.format(std::cout);
+ }
+
+ int main(const std::vector& args)
+ {
+ if (_helpRequested)
+ {
+ displayHelp();
+ }
+ else
+ {
+ // get parameters from configuration file
+ unsigned short port = (unsigned short) config().getInt("HTTPSTimeServer.port", 9443);
+ std::string format(config().getString("HTTPSTimeServer.format", DateTimeFormat::SORTABLE_FORMAT));
+
+ // set-up a server socket
+ SecureServerSocket svs(port);
+ // set-up a HTTPServer instance
+ HTTPServer srv(new TimeRequestHandlerFactory(format), svs, new HTTPServerParams);
+ // start the HTTPServer
+ srv.start();
+ // wait for CTRL-C or kill
+ waitForTerminationRequest();
+ // Stop the HTTPServer
+ srv.stop();
+ }
+ return Application::EXIT_OK;
+ }
+
+private:
+ bool _helpRequested;
+};
+
+
+int main(int argc, char** argv)
+{
+ HTTPSTimeServer app;
+ return app.run(argc, argv);
+}
diff --git a/NetSSL_Win/samples/Mail/CMakeLists.txt b/NetSSL_Win/samples/Mail/CMakeLists.txt
new file mode 100644
index 000000000..e9126a607
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(SAMPLE_NAME "Mail-ssl")
+
+set(LOCAL_SRCS "")
+aux_source_directory(src LOCAL_SRCS)
+
+add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} )
+target_link_libraries( ${SAMPLE_NAME} PocoNetSSLWin PocoCrypto PocoUtil PocoNet PocoXML PocoFoundation )
diff --git a/NetSSL_Win/samples/Mail/Mail.progen b/NetSSL_Win/samples/Mail/Mail.progen
new file mode 100644
index 000000000..b12a664bb
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail.progen
@@ -0,0 +1,18 @@
+vc.project.guid = ${vc.project.guidFromName}
+vc.project.name = ${vc.project.baseName}
+vc.project.target = ${vc.project.name}
+vc.project.type = executable
+vc.project.pocobase = ..\\..\\..
+vc.project.platforms = Win32, x64, WinCE
+vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md
+vc.project.prototype = ${vc.project.name}_vs90.vcproj
+vc.project.compiler.include = ..\\..\\..\\Foundation\\include;..\\..\\..\\XML\\include;..\\..\\..\\Util\\include;..\\..\\..\\Net\\include;..\\..\\..\\NetSSL_Win\\include
+vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib
+vc.project.linker.dependencies.x64 = ws2_32.lib iphlpapi.lib
+vc.project.linker.dependencies.WinCE = ws2.lib iphlpapi.lib
+vc.project.linker.dependencies.debug_shared =
+vc.project.linker.dependencies.release_shared =
+vc.project.linker.dependencies.debug_static_md = Crypt32.lib
+vc.project.linker.dependencies.release_static_md = Crypt32.lib
+vc.project.linker.dependencies.debug_static_mt = Crypt32.lib
+vc.project.linker.dependencies.release_static_mt = Crypt32.lib
diff --git a/NetSSL_Win/samples/Mail/Mail_CE_vs90.vcproj b/NetSSL_Win/samples/Mail/Mail_CE_vs90.vcproj
new file mode 100644
index 000000000..1c0f19a35
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_CE_vs90.vcproj
@@ -0,0 +1,474 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj
new file mode 100644
index 000000000..55b91367c
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj
@@ -0,0 +1,299 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V300
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ true
+ Speed
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj.filters
new file mode 100644
index 000000000..e737a316f
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs110.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {7826e724-7447-4aba-9cb8-d103e1dd17e8}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj
new file mode 100644
index 000000000..c51b6c850
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj
@@ -0,0 +1,299 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V310
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ true
+ Speed
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\Maild.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\Maild.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\Mail.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj.filters
new file mode 100644
index 000000000..ec197641c
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_WEC2013_vs120.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {81d6e736-0b03-4452-8587-2e7e0750d6fe}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj b/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj
new file mode 100644
index 000000000..47cdd4665
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin\
+ obj\$(Configuration)\
+ true
+ bin\
+ obj\$(Configuration)\
+ false
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\Maild.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\Maild.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\Maild.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj.filters
new file mode 100644
index 000000000..c61e15748
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs100.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {1e35a374-f7cf-45ed-b446-1c921cf9f9ec}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj b/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj
new file mode 100644
index 000000000..34878f874
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj.filters
new file mode 100644
index 000000000..7b2c8f170
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs110.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {b9bed9f5-b5e5-47ac-b65f-e4143b605c77}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj b/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj
new file mode 100644
index 000000000..1c5a6c245
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Maild.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\Maild.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\Mail.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj.filters
new file mode 100644
index 000000000..2e162bc6e
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs120.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {f0d2316c-c9be-45e9-ad59-ee6caad8fdc1}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_vs71.vcproj b/NetSSL_Win/samples/Mail/Mail_vs71.vcproj
new file mode 100644
index 000000000..cfcbf5564
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs71.vcproj
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_vs80.vcproj b/NetSSL_Win/samples/Mail/Mail_vs80.vcproj
new file mode 100644
index 000000000..905dbce8a
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs80.vcproj
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_vs90.vcproj b/NetSSL_Win/samples/Mail/Mail_vs90.vcproj
new file mode 100644
index 000000000..5c7aa2c74
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_vs90.vcproj
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj b/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj
new file mode 100644
index 000000000..11c1f26da
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin64\
+ obj64\$(Configuration)\
+ true
+ bin64\
+ obj64\$(Configuration)\
+ false
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\Maild.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\Maild.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\Maild.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj.filters
new file mode 100644
index 000000000..d82347217
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs100.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {3e270c49-380a-4b08-8cef-735c3893d11f}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj b/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj
new file mode 100644
index 000000000..f5537ef60
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj.filters
new file mode 100644
index 000000000..eb1e301de
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs110.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {f1578c0f-4610-49e1-8c4d-368ba7747e0b}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj b/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj
new file mode 100644
index 000000000..c62ea5b0f
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj
@@ -0,0 +1,314 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ Mail
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}
+ Mail
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ Maild
+ Maild
+ Maild
+ Mail
+ Mail
+ Mail
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Maild.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\Maild.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\Mail.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj.filters b/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj.filters
new file mode 100644
index 000000000..61bd61b5c
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs120.vcxproj.filters
@@ -0,0 +1,18 @@
+
+
+
+
+ {afa819d7-6d1a-4859-baab-3bff7fdd3a68}
+
+
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/Mail/Mail_x64_vs90.vcproj b/NetSSL_Win/samples/Mail/Mail_x64_vs90.vcproj
new file mode 100644
index 000000000..36aa73c06
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/Mail_x64_vs90.vcproj
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/Mail/src/Mail.cpp b/NetSSL_Win/samples/Mail/src/Mail.cpp
new file mode 100644
index 000000000..cca8036c2
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/src/Mail.cpp
@@ -0,0 +1,117 @@
+//
+// Mail.cpp
+//
+// $Id: //poco/1.4/NetSSL_OpenSSL/samples/Mail/src/Mail.cpp#1 $
+//
+// This sample demonstrates the MailMessage and SecureSMTPClientSession classes.
+//
+// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/MailMessage.h"
+#include "Poco/Net/MailRecipient.h"
+#include "Poco/Net/SecureSMTPClientSession.h"
+#include "Poco/Net/StringPartSource.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include "Poco/SharedPtr.h"
+#include "Poco/Path.h"
+#include "Poco/Exception.h"
+#include
+
+
+using Poco::Net::MailMessage;
+using Poco::Net::MailRecipient;
+using Poco::Net::SMTPClientSession;
+using Poco::Net::SecureSMTPClientSession;
+using Poco::Net::StringPartSource;
+using Poco::Net::SSLManager;
+using Poco::Net::Context;
+using Poco::Net::InvalidCertificateHandler;
+using Poco::Net::ConsoleCertificateHandler;
+using Poco::SharedPtr;
+using Poco::Path;
+using Poco::Exception;
+
+
+class SSLInitializer
+{
+public:
+ SSLInitializer()
+ {
+ Poco::Net::initializeSSL();
+ }
+
+ ~SSLInitializer()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+};
+
+
+const unsigned char PocoLogo[] =
+{
+ #include "PocoLogo.hpp"
+};
+
+
+int main(int argc, char** argv)
+{
+ SSLInitializer sslInitializer;
+
+ if (argc < 4)
+ {
+ Path p(argv[0]);
+ std::cerr << "usage: " << p.getBaseName() << " [ ]" << std::endl;
+ std::cerr << " Send an email greeting from to ," << std::endl;
+ std::cerr << " using a secure connection to the SMTP server at ." << std::endl;
+ return 1;
+ }
+
+ std::string mailhost(argv[1]);
+ std::string sender(argv[2]);
+ std::string recipient(argv[3]);
+ std::string username(argc >= 5 ? argv[4] : "");
+ std::string password(argc >= 6 ? argv[5] : "");
+
+ try
+ {
+ // Note: we must create the passphrase handler prior Context
+ SharedPtr pCert = new ConsoleCertificateHandler(false); // ask the user via console
+ Context::Ptr pContext = new Context(Context::CLIENT_USE, "");
+ SSLManager::instance().initializeClient(pCert, pContext);
+
+ MailMessage message;
+ message.setSender(sender);
+ message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, recipient));
+ message.setSubject("Hello from the POCO C++ Libraries");
+ std::string content;
+ content += "Hello ";
+ content += recipient;
+ content += ",\r\n\r\n";
+ content += "This is a greeting from the POCO C++ Libraries.\r\n\r\n";
+ std::string logo(reinterpret_cast(PocoLogo), sizeof(PocoLogo));
+ message.addContent(new StringPartSource(content));
+ message.addAttachment("logo", new StringPartSource(logo, "image/gif"));
+
+ SecureSMTPClientSession session(mailhost);
+ session.login();
+ session.startTLS(pContext);
+ if (!username.empty())
+ {
+ session.login(SMTPClientSession::AUTH_LOGIN, username, password);
+ }
+ session.sendMessage(message);
+ session.close();
+ }
+ catch (Exception& exc)
+ {
+ std::cerr << exc.displayText() << std::endl;
+ return 1;
+ }
+ return 0;
+}
diff --git a/NetSSL_Win/samples/Mail/src/PocoLogo.hpp b/NetSSL_Win/samples/Mail/src/PocoLogo.hpp
new file mode 100644
index 000000000..a1b39a593
--- /dev/null
+++ b/NetSSL_Win/samples/Mail/src/PocoLogo.hpp
@@ -0,0 +1,134 @@
+// The C++ Portable Components logo in GIF format
+
+0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xa0, 0x00, 0x85, 0x00, 0xa2, 0x00, 0x00, 0xd1, 0xdd, 0xe4,
+0x45, 0x9b, 0xca, 0x41, 0x55, 0x61, 0x8a, 0x96, 0x9e, 0xa2, 0xbc, 0xcc, 0x00, 0x1b, 0x2c, 0x00,
+0x75, 0xb6, 0xff, 0xff, 0xff, 0x21, 0xf9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00,
+0x00, 0x00, 0xa0, 0x00, 0x85, 0x00, 0x00, 0x03, 0xff, 0x78, 0xba, 0xdc, 0xfe, 0x30, 0xca, 0x49,
+0xab, 0xbd, 0x38, 0xeb, 0xcd, 0xbb, 0xff, 0x60, 0x28, 0x8e, 0x64, 0x69, 0x9e, 0x68, 0xaa, 0xae,
+0x6c, 0xeb, 0xbe, 0x70, 0x2c, 0xcf, 0x2b, 0x40, 0xdc, 0x78, 0xae, 0xef, 0x04, 0xe0, 0xda, 0xbc,
+0xe0, 0x0e, 0xe0, 0xeb, 0x00, 0x06, 0xc5, 0xc5, 0x6d, 0x72, 0x4b, 0x76, 0x08, 0x01, 0x83, 0x74,
+0x4a, 0xad, 0x5a, 0xab, 0x01, 0x27, 0x09, 0x10, 0xbd, 0x7a, 0xbf, 0x86, 0x40, 0x6f, 0x33, 0x28,
+0x10, 0x1a, 0x85, 0x82, 0x44, 0x90, 0x2e, 0x68, 0x2f, 0xb6, 0x2e, 0x78, 0x7e, 0x15, 0x8f, 0xe2,
+0xf4, 0xbc, 0xd5, 0x8e, 0x29, 0x9f, 0x09, 0x48, 0x07, 0x69, 0x11, 0x65, 0x02, 0x6c, 0x03, 0x1b,
+0x72, 0x7a, 0x8b, 0x54, 0x67, 0x1f, 0x8a, 0x8c, 0x8c, 0x59, 0x17, 0x7e, 0x82, 0x66, 0x96, 0x11,
+0x69, 0x3e, 0x05, 0x02, 0x19, 0x5c, 0x91, 0xa0, 0x53, 0x8e, 0x1c, 0x90, 0xa1, 0x8b, 0xa3, 0x13,
+0x95, 0x69, 0x67, 0x83, 0x0c, 0x36, 0x0a, 0x9a, 0x82, 0x9d, 0x70, 0xa6, 0xb5, 0x93, 0x19, 0x04,
+0xb5, 0xb6, 0x15, 0xaa, 0x97, 0xad, 0x0b, 0x6c, 0xac, 0x6e, 0xb2, 0x17, 0xb9, 0xba, 0xb5, 0x6f,
+0x12, 0xc6, 0xc7, 0xa6, 0xc9, 0x0c, 0xbd, 0x3d, 0xbf, 0x0a, 0xc1, 0x96, 0x3e, 0x44, 0x16, 0xcb,
+0xcc, 0xa0, 0x01, 0xb4, 0xda, 0xa6, 0xdc, 0x12, 0x65, 0x9c, 0x69, 0x86, 0x9c, 0x0d, 0xd4, 0xb1,
+0xdd, 0xde, 0xa1, 0xe0, 0x4c, 0xeb, 0xbb, 0xe1, 0x6d, 0x6d, 0x02, 0x5a, 0xe2, 0x6c, 0xb3, 0x17,
+0xa5, 0xef, 0x7a, 0xed, 0x11, 0xfb, 0xb5, 0xa8, 0x1e, 0x10, 0x19, 0xe8, 0x8c, 0x0d, 0x27, 0x67,
+0x10, 0xb2, 0xfd, 0x63, 0x84, 0xf0, 0x80, 0xc2, 0x85, 0x8b, 0x1a, 0xc2, 0x09, 0x48, 0x01, 0x00,
+0xc4, 0x50, 0x14, 0x17, 0x58, 0xbc, 0xb8, 0x0d, 0xff, 0x83, 0x21, 0x11, 0xfa, 0xbc, 0x88, 0x21,
+0x48, 0xb2, 0x24, 0x91, 0x1b, 0x21, 0xaf, 0x38, 0x7b, 0xf8, 0xa5, 0x87, 0xc9, 0x97, 0x04, 0xa1,
+0x44, 0xbc, 0x20, 0x4d, 0xe3, 0x90, 0x09, 0xfc, 0x3e, 0x7c, 0xa2, 0x93, 0xf1, 0x80, 0x9e, 0x9e,
+0x18, 0x36, 0xf2, 0xa4, 0xa9, 0xa6, 0x81, 0x38, 0x79, 0x35, 0x1b, 0x08, 0x05, 0x23, 0xb1, 0x58,
+0x9e, 0x07, 0x2c, 0xad, 0x34, 0x75, 0x3a, 0xa7, 0xdf, 0x84, 0x9a, 0xe2, 0x06, 0x68, 0xdd, 0x8a,
+0x28, 0x42, 0x54, 0x2a, 0x53, 0xf3, 0x0d, 0x6d, 0x90, 0x72, 0x4a, 0x58, 0xaa, 0x4c, 0x2d, 0xd4,
+0x3c, 0x94, 0xa1, 0xac, 0x01, 0xa0, 0x1d, 0xdc, 0x5a, 0xf5, 0x39, 0x07, 0x2e, 0x87, 0xa5, 0x5e,
+0xec, 0x2a, 0x00, 0xb0, 0xf6, 0x12, 0x06, 0xb7, 0x67, 0xd5, 0x7d, 0x51, 0x5a, 0x15, 0xc5, 0x57,
+0x29, 0x73, 0x01, 0x71, 0x1d, 0x70, 0xef, 0x9c, 0xdf, 0x0b, 0x85, 0x4f, 0xb8, 0x25, 0x0c, 0x66,
+0xae, 0x08, 0xbc, 0x7b, 0x1c, 0x1c, 0x45, 0x1a, 0x90, 0x9a, 0xe0, 0x3a, 0x28, 0x00, 0xbb, 0x8a,
+0x2c, 0xb9, 0xb2, 0x03, 0x02, 0x86, 0x52, 0x0b, 0x08, 0xe4, 0x58, 0xef, 0x68, 0x30, 0xae, 0x13,
+0xcd, 0x71, 0x82, 0xb9, 0x4a, 0x6c, 0xd9, 0x5f, 0x2c, 0x5b, 0xf0, 0x6c, 0xa1, 0x76, 0xa3, 0xd0,
+0xb3, 0x5f, 0xb7, 0x4c, 0x51, 0x56, 0x77, 0x85, 0x57, 0x41, 0xeb, 0x02, 0x4f, 0xab, 0x51, 0xf9,
+0x72, 0x91, 0x0f, 0xb2, 0xda, 0x0b, 0x0c, 0xc1, 0xb7, 0xa8, 0xe7, 0x5e, 0x28, 0x0f, 0xc7, 0x9e,
+0xd9, 0x28, 0x39, 0xa4, 0xf8, 0x34, 0x1a, 0x94, 0x17, 0x5e, 0x7b, 0xde, 0x13, 0xd6, 0xa7, 0x98,
+0xbf, 0x72, 0x5b, 0x43, 0x71, 0xcd, 0xbe, 0xcc, 0xf0, 0x2d, 0xcf, 0x17, 0x29, 0xb9, 0x08, 0xe9,
+0xdf, 0x96, 0x36, 0x2d, 0xfc, 0x3c, 0x77, 0x2c, 0xff, 0xf0, 0x09, 0x23, 0x8c, 0x63, 0x02, 0xdc,
+0x54, 0x9d, 0x73, 0x24, 0xb8, 0xa5, 0x5f, 0x7f, 0xec, 0x11, 0xc7, 0xdf, 0x33, 0xf1, 0x0d, 0xc8,
+0x00, 0x6f, 0xc7, 0x21, 0x08, 0xd2, 0x53, 0xeb, 0x59, 0xd1, 0x5e, 0x5b, 0x0f, 0x2e, 0x00, 0x0d,
+0x26, 0x13, 0x3e, 0x56, 0x21, 0x6c, 0x97, 0xc9, 0x44, 0xc7, 0x5c, 0xf9, 0x6d, 0xf8, 0x57, 0x87,
+0x0a, 0xf8, 0x01, 0x80, 0x21, 0xd1, 0x14, 0x05, 0x8c, 0x88, 0x15, 0x39, 0xc7, 0x45, 0x00, 0x38,
+0xe6, 0xa8, 0xe3, 0x8e, 0x3c, 0x46, 0x22, 0x90, 0x85, 0x25, 0xbc, 0xe7, 0x9d, 0x7d, 0x7d, 0xb5,
+0x97, 0xa2, 0x02, 0x87, 0xbd, 0x93, 0xd1, 0x91, 0xff, 0x51, 0x31, 0xd7, 0x66, 0xe4, 0x11, 0x98,
+0x1c, 0x89, 0x07, 0x28, 0xe8, 0x4d, 0x32, 0x4c, 0xee, 0x07, 0x9d, 0x52, 0x30, 0x35, 0x40, 0xc0,
+0x3c, 0xa9, 0x99, 0x73, 0x20, 0x95, 0x56, 0x32, 0xd3, 0x53, 0x96, 0x26, 0x08, 0x79, 0x97, 0x6a,
+0xe5, 0x94, 0xc7, 0xa0, 0x86, 0x0a, 0x94, 0xa9, 0x8b, 0x71, 0x68, 0x06, 0xc9, 0xa2, 0x87, 0x6c,
+0x7e, 0xa4, 0x93, 0x73, 0x72, 0x9a, 0x02, 0x57, 0x9d, 0x09, 0xde, 0xf9, 0x22, 0x91, 0x32, 0x1a,
+0xc1, 0x27, 0x47, 0xc6, 0xed, 0x05, 0x64, 0xa0, 0xb9, 0xc1, 0x47, 0xcf, 0x11, 0x05, 0x20, 0x51,
+0x0f, 0x3d, 0xe7, 0x74, 0xf5, 0x23, 0x99, 0x17, 0x25, 0xaa, 0x28, 0x95, 0x5a, 0x82, 0xe6, 0x9d,
+0x23, 0x65, 0x58, 0x1a, 0x62, 0x40, 0x49, 0x35, 0x87, 0xe9, 0x3f, 0xb7, 0x4c, 0x00, 0xe8, 0x08,
+0x6a, 0x7a, 0xe8, 0x57, 0xa8, 0x0f, 0x50, 0x63, 0xc8, 0x26, 0x6e, 0x9a, 0xba, 0x5d, 0x9f, 0x3f,
+0x7d, 0x06, 0x27, 0x0a, 0xa4, 0xb9, 0x0a, 0x6a, 0xa4, 0xb1, 0xc6, 0x47, 0x2b, 0x7e, 0x87, 0xae,
+0x93, 0xea, 0x88, 0x8d, 0xa2, 0xd7, 0x6b, 0x8b, 0xff, 0xaf, 0x02, 0xeb, 0x00, 0x3a, 0xc3, 0x88,
+0x79, 0xe9, 0x76, 0x37, 0xf2, 0x68, 0xed, 0xb5, 0x62, 0x8c, 0xa1, 0x41, 0x7e, 0x9a, 0x3e, 0xb1,
+0xec, 0x01, 0x85, 0xf4, 0x10, 0xea, 0x35, 0xa3, 0x56, 0x43, 0xcc, 0x98, 0xdb, 0xd1, 0x60, 0xeb,
+0x60, 0x27, 0x8c, 0xe5, 0x0a, 0xa1, 0xe5, 0x1d, 0x52, 0x9f, 0x0d, 0xd2, 0x3a, 0xb0, 0xea, 0x0c,
+0xee, 0x8e, 0x90, 0xa4, 0x01, 0xc9, 0xa0, 0x66, 0x5f, 0x79, 0x50, 0xb6, 0x21, 0x6a, 0x86, 0xb6,
+0xa9, 0x4b, 0x56, 0xbe, 0x20, 0xe4, 0x17, 0x86, 0x04, 0x26, 0x9d, 0x96, 0xe7, 0xc0, 0x04, 0xff,
+0x66, 0xb0, 0x12, 0x79, 0x50, 0xe7, 0x55, 0x1e, 0x2a, 0xee, 0xc9, 0xe9, 0xc4, 0x74, 0x21, 0xbc,
+0xc1, 0xbe, 0x52, 0x38, 0x73, 0x44, 0x9e, 0xb5, 0x7a, 0xb2, 0xa8, 0xba, 0x20, 0x23, 0x86, 0xed,
+0xca, 0x38, 0x2e, 0xa2, 0x5b, 0x7d, 0xff, 0xda, 0xcb, 0x18, 0x9b, 0x10, 0xaf, 0xdb, 0x20, 0xc7,
+0x0b, 0xe0, 0xca, 0x51, 0x4f, 0x85, 0x48, 0x34, 0x28, 0x91, 0xc4, 0x6e, 0xcc, 0x71, 0xca, 0x1c,
+0x21, 0x46, 0x08, 0x8d, 0xd1, 0x71, 0x32, 0x80, 0x62, 0x5a, 0x01, 0x75, 0xaf, 0xba, 0x3a, 0xa3,
+0x1a, 0x8f, 0x5e, 0x14, 0xd6, 0x28, 0x34, 0xc7, 0x0a, 0x17, 0xcd, 0xef, 0xd4, 0x14, 0x54, 0xad,
+0xea, 0xc9, 0x13, 0x13, 0xbd, 0x90, 0xa6, 0x95, 0x4c, 0xe0, 0x35, 0xc3, 0x60, 0x4f, 0x9c, 0xf5,
+0x42, 0x7a, 0x95, 0xbd, 0x06, 0xd2, 0x68, 0x5f, 0x8d, 0xb3, 0x43, 0x5a, 0xef, 0xca, 0x04, 0xa5,
+0x66, 0xd7, 0x6b, 0x75, 0xba, 0x73, 0x33, 0x60, 0xa2, 0xd6, 0x7c, 0xe8, 0x4b, 0x0e, 0xcd, 0x41,
+0xf3, 0xdd, 0xb7, 0xdf, 0x5a, 0xab, 0x38, 0xf3, 0x9f, 0xe3, 0xcd, 0x53, 0xb8, 0x7f, 0x87, 0xdb,
+0x1b, 0x75, 0x1e, 0xc7, 0xee, 0x26, 0x4f, 0xc6, 0xff, 0x11, 0x94, 0x65, 0x31, 0x0d, 0x71, 0xb4,
+0x6c, 0x0b, 0x8e, 0xda, 0xe2, 0xa2, 0xf4, 0x3d, 0x38, 0x44, 0x6e, 0xfa, 0x0c, 0x65, 0x37, 0x0e,
+0x95, 0x6a, 0xac, 0x9d, 0xee, 0xfa, 0x07, 0xa9, 0x93, 0x03, 0x71, 0xe3, 0xe4, 0x6c, 0xfe, 0xfa,
+0xed, 0xe0, 0xfa, 0xc5, 0x46, 0x32, 0xe1, 0xe2, 0xc0, 0x16, 0xee, 0xc0, 0x53, 0xa2, 0x7b, 0xa1,
+0xe5, 0x6a, 0xa4, 0x77, 0xf0, 0xc8, 0x27, 0x4d, 0xa9, 0x56, 0x10, 0x54, 0x7d, 0xbc, 0x11, 0x4c,
+0x2f, 0x26, 0xfd, 0xf4, 0xd4, 0x6b, 0x65, 0xbb, 0x40, 0xd1, 0x57, 0x4f, 0x7d, 0xe8, 0x1b, 0xfc,
+0x0c, 0x5e, 0x6b, 0x68, 0x94, 0x3c, 0x11, 0xed, 0x84, 0x96, 0x6f, 0xfe, 0x7d, 0x1e, 0xd8, 0x40,
+0xfe, 0xf9, 0xe5, 0xaf, 0x66, 0xfb, 0xc8, 0x79, 0x82, 0xcf, 0xc0, 0xf3, 0xbd, 0x05, 0xcc, 0xfe,
+0xfd, 0x40, 0x77, 0x60, 0x3f, 0xfe, 0xe7, 0xb7, 0x5e, 0xc2, 0xef, 0x48, 0xa2, 0x9f, 0xaa, 0xd6,
+0xc7, 0xbf, 0x02, 0x96, 0xaa, 0x22, 0x04, 0x34, 0xe0, 0xf9, 0xf0, 0x16, 0x94, 0x81, 0x24, 0x64,
+0x70, 0xe5, 0x80, 0x1b, 0x13, 0x14, 0x48, 0x41, 0xa4, 0x6c, 0x2b, 0x81, 0x15, 0x34, 0x5f, 0xcd,
+0x12, 0x42, 0xbb, 0x9a, 0xf9, 0x4b, 0x1e, 0x1b, 0x8c, 0x47, 0x06, 0x33, 0x28, 0xba, 0x11, 0x52,
+0xd0, 0x35, 0x30, 0x43, 0xca, 0x06, 0x09, 0xb2, 0x01, 0x0c, 0x9a, 0xf0, 0x7c, 0x7d, 0x78, 0x61,
+0x05, 0xc5, 0xe7, 0xaa, 0x47, 0x11, 0xa1, 0x10, 0x26, 0x70, 0xa1, 0x0c, 0xcb, 0x27, 0xbc, 0x1d,
+0x52, 0x90, 0x86, 0xb9, 0x23, 0x15, 0xf1, 0x90, 0x64, 0x3d, 0x0d, 0xec, 0xcf, 0x87, 0x30, 0xac,
+0xc0, 0x97, 0x90, 0x78, 0x42, 0xae, 0xcd, 0x6f, 0x88, 0xe3, 0x61, 0xa0, 0x12, 0x99, 0xa8, 0xc0,
+0xe3, 0x50, 0xb1, 0x82, 0x08, 0x71, 0x1b, 0x2c, 0xff, 0x88, 0x17, 0xae, 0xc6, 0x5c, 0x40, 0x87,
+0x57, 0x94, 0x07, 0x2f, 0xc2, 0xa8, 0x40, 0xf1, 0x69, 0xb1, 0x3e, 0xf2, 0x13, 0x20, 0x7c, 0xc8,
+0x78, 0x3f, 0x20, 0x1e, 0x20, 0x85, 0x6c, 0xc4, 0xdf, 0x06, 0x7b, 0x77, 0x03, 0x2f, 0xce, 0xc8,
+0x11, 0x7a, 0xaa, 0x08, 0xff, 0x0a, 0xe4, 0x12, 0x98, 0xf8, 0xb1, 0x4b, 0x5d, 0xc3, 0xdf, 0x6a,
+0xfa, 0xf8, 0xc7, 0x98, 0x30, 0x86, 0x7f, 0x05, 0x21, 0x52, 0x67, 0x74, 0xe7, 0xc6, 0x69, 0xb4,
+0xf1, 0x7a, 0x20, 0x58, 0x22, 0xfb, 0x42, 0xd8, 0x43, 0xf6, 0x01, 0x65, 0x66, 0x86, 0xf0, 0x9f,
+0x23, 0x1d, 0x71, 0x40, 0xa5, 0x3c, 0xd2, 0x60, 0x3a, 0x94, 0xa2, 0x07, 0x3e, 0xa8, 0x41, 0x0f,
+0xdc, 0x83, 0x08, 0xb3, 0x22, 0xd7, 0x03, 0x17, 0xa8, 0x36, 0xf6, 0x89, 0x12, 0x04, 0x2e, 0xa4,
+0xa1, 0x2a, 0xa1, 0x02, 0x2f, 0x11, 0xb6, 0x0f, 0x6b, 0x96, 0x34, 0x81, 0x24, 0xcb, 0xd7, 0x2f,
+0x81, 0x29, 0x83, 0x7c, 0x34, 0x3c, 0x62, 0x1a, 0x28, 0xe9, 0x82, 0x5d, 0x12, 0xa9, 0x91, 0x2d,
+0x3c, 0x1f, 0x45, 0xea, 0x63, 0x10, 0x62, 0x66, 0xc0, 0x85, 0x90, 0x14, 0x81, 0x31, 0xed, 0xe3,
+0x4c, 0x0e, 0x08, 0xd3, 0x59, 0x10, 0x42, 0x04, 0x1a, 0x47, 0x00, 0x4d, 0x8e, 0x5d, 0xb3, 0x9a,
+0xdd, 0xeb, 0x5f, 0x80, 0x1c, 0xf9, 0x4b, 0xc2, 0x45, 0xc0, 0x85, 0x38, 0xfb, 0x66, 0x0a, 0x58,
+0xf9, 0x29, 0x72, 0x0a, 0x64, 0x7d, 0x34, 0xc4, 0x20, 0x32, 0x57, 0xa0, 0x4e, 0x14, 0xb0, 0x13,
+0x42, 0x78, 0x1c, 0xa2, 0x23, 0x0b, 0x54, 0x92, 0xb7, 0xdd, 0xd2, 0x9b, 0xe2, 0xb4, 0xa7, 0xf9,
+0xdc, 0x04, 0xab, 0x03, 0xe4, 0x51, 0x7e, 0x5f, 0x1c, 0x68, 0x3a, 0x03, 0x7a, 0x82, 0x7b, 0x2a,
+0x61, 0x98, 0xd2, 0x43, 0xa8, 0xe5, 0xfe, 0x39, 0xff, 0xb1, 0x7a, 0x36, 0x54, 0xa1, 0x6b, 0xb4,
+0x8f, 0x44, 0x2b, 0x20, 0xcf, 0x85, 0x96, 0x52, 0xa0, 0x14, 0x55, 0x8a, 0xf4, 0x16, 0xb9, 0xa1,
+0x8e, 0x02, 0xf4, 0xa3, 0x26, 0x80, 0x63, 0xcc, 0x38, 0x60, 0xc7, 0x89, 0xd6, 0xf2, 0xa4, 0xe5,
+0x03, 0xe7, 0xb6, 0x1c, 0x5a, 0x42, 0x4e, 0xb0, 0xc9, 0x9f, 0x2f, 0xad, 0x28, 0x43, 0x4b, 0xa0,
+0xd2, 0xef, 0xdd, 0x25, 0xa7, 0xc1, 0x0a, 0xa9, 0xba, 0x2c, 0xca, 0x53, 0x9a, 0x7a, 0xe4, 0x20,
+0xfd, 0x3c, 0x27, 0x46, 0x75, 0x8a, 0xd2, 0xa2, 0x2e, 0x55, 0x03, 0x67, 0xc3, 0xe9, 0x31, 0x3d,
+0x1a, 0x53, 0x14, 0xf4, 0x34, 0x4a, 0x2c, 0x95, 0xa0, 0x52, 0x85, 0x4a, 0x03, 0xa2, 0x6e, 0xc1,
+0xa8, 0x46, 0xd9, 0xe0, 0x3d, 0x46, 0x2a, 0xd5, 0x95, 0x32, 0xb5, 0xaa, 0xe8, 0x01, 0xeb, 0x13,
+0xab, 0xc3, 0xc3, 0xad, 0x02, 0x75, 0xa8, 0x3b, 0xfd, 0xea, 0x53, 0x95, 0xb2, 0xc4, 0x26, 0xd8,
+0x8b, 0x64, 0xf1, 0x9c, 0x6b, 0x57, 0xe3, 0x7a, 0x07, 0xb5, 0x1a, 0x54, 0x85, 0x21, 0x30, 0xe9,
+0x59, 0x09, 0x25, 0x53, 0x4f, 0xf8, 0xf5, 0x90, 0x91, 0xd2, 0x64, 0x56, 0xb9, 0x8a, 0x3a, 0xbe,
+0x5e, 0xc6, 0xaf, 0x5b, 0xc4, 0x0f, 0x26, 0x07, 0x99, 0x37, 0xf3, 0x51, 0x95, 0xb0, 0x86, 0x81,
+0x2c, 0xb8, 0x36, 0x38, 0xcd, 0x55, 0x94, 0xd5, 0x3e, 0xd1, 0x0c, 0x81, 0x57, 0x47, 0x30, 0xda,
+0x84, 0xe2, 0x0d, 0x52, 0x79, 0x35, 0x5f, 0x68, 0x23, 0xa9, 0xd9, 0x0e, 0xb8, 0x90, 0x98, 0xb3,
+0x2c, 0xde, 0x5e, 0xd4, 0x58, 0xda, 0x18, 0x74, 0x16, 0xab, 0x4e, 0x55, 0x6d, 0xde, 0x9a, 0x47,
+0x23, 0xda, 0xb2, 0x6f, 0xb5, 0xe9, 0xfb, 0xad, 0x09, 0xae, 0xa9, 0x4f, 0x57, 0xec, 0x2e, 0x58,
+0xa4, 0xa2, 0xe1, 0x6d, 0xc9, 0x03, 0xdc, 0x0e, 0xff, 0xb8, 0xb2, 0xb9, 0x0e, 0x71, 0x65, 0x59,
+0x49, 0xfa, 0x2e, 0x59, 0xe2, 0x0f, 0xba, 0x46, 0xbc, 0x1f, 0x70, 0x89, 0xab, 0xd5, 0xbf, 0x0e,
+0x6e, 0x91, 0x7c, 0xac, 0x23, 0x36, 0x79, 0x7b, 0xbf, 0xc2, 0x96, 0x60, 0xb9, 0xe4, 0xc1, 0x9c,
+0x46, 0xb8, 0x3b, 0x8c, 0xab, 0x14, 0xf7, 0xaa, 0x76, 0x41, 0x2f, 0x35, 0xb5, 0x47, 0x5f, 0xfa,
+0x4a, 0x04, 0x8c, 0x4a, 0xab, 0x2f, 0xf5, 0xf0, 0xab, 0x46, 0x60, 0x88, 0xef, 0x45, 0xe6, 0x4c,
+0x45, 0x1c, 0xdb, 0xa8, 0xaa, 0x01, 0x17, 0x10, 0xbb, 0xcf, 0x34, 0xb0, 0x5e, 0x9f, 0xa5, 0xe0,
+0x49, 0x86, 0xad, 0xc1, 0x6f, 0xa5, 0x25, 0x84, 0x23, 0xec, 0x37, 0x4d, 0x1e, 0xd4, 0x21, 0x16,
+0x06, 0x27, 0x7f, 0xaf, 0xd8, 0x48, 0xf6, 0xb2, 0xb1, 0x21, 0x5a, 0x04, 0xd1, 0x1d, 0xd1, 0x50,
+0xdc, 0xa0, 0x4e, 0x18, 0x7d, 0x81, 0x3c, 0xb1, 0x2f, 0x9d, 0xb8, 0x80, 0x22, 0x85, 0x2f, 0x86,
+0x2a, 0x9e, 0xa7, 0x87, 0x99, 0xd8, 0xb6, 0xde, 0x12, 0xcf, 0x79, 0xf3, 0x74, 0xe4, 0x89, 0x73,
+0xbc, 0xe1, 0x1d, 0xba, 0x26, 0xc4, 0x2e, 0x9e, 0x5f, 0x8e, 0x99, 0x35, 0xe1, 0x21, 0xcf, 0xf8,
+0x85, 0xb1, 0x01, 0xf2, 0x8d, 0x7b, 0x3b, 0xe4, 0xbd, 0xf4, 0xd8, 0x84, 0x4d, 0xf6, 0x1e, 0x19,
+0x0b, 0x4b, 0x47, 0x7f, 0xc5, 0x8b, 0x13, 0x39, 0x00, 0xe0, 0x05, 0x15, 0xdc, 0x64, 0x27, 0x87,
+0x51, 0xb1, 0x05, 0x26, 0xd2, 0xc0, 0xe0, 0xab, 0x13, 0xc4, 0x4e, 0x79, 0x94, 0x66, 0x86, 0x32,
+0x98, 0x8f, 0xd3, 0xb8, 0x02, 0xbd, 0x33, 0xbd, 0x77, 0x00, 0x82, 0x10, 0xe6, 0x4c, 0x67, 0xe0,
+0x9e, 0x84, 0xce, 0x42, 0x70, 0x60, 0xf2, 0xf6, 0xcc, 0xe7, 0x3e, 0xfb, 0xf9, 0xcf, 0x80, 0x0e,
+0xb4, 0xa0, 0x07, 0x4d, 0xe8, 0x42, 0x97, 0x20, 0x01, 0x01, 0x00, 0x3b
diff --git a/NetSSL_Win/samples/download/CMakeLists.txt b/NetSSL_Win/samples/download/CMakeLists.txt
new file mode 100644
index 000000000..7bb405ec9
--- /dev/null
+++ b/NetSSL_Win/samples/download/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(SAMPLE_NAME "download-ssl")
+
+set(LOCAL_SRCS "")
+aux_source_directory(src LOCAL_SRCS)
+
+add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} )
+target_link_libraries( ${SAMPLE_NAME} PocoNetSSLWin PocoCrypto PocoUtil PocoNet PocoXML PocoFoundation )
diff --git a/NetSSL_Win/samples/download/download.progen b/NetSSL_Win/samples/download/download.progen
new file mode 100644
index 000000000..b12a664bb
--- /dev/null
+++ b/NetSSL_Win/samples/download/download.progen
@@ -0,0 +1,18 @@
+vc.project.guid = ${vc.project.guidFromName}
+vc.project.name = ${vc.project.baseName}
+vc.project.target = ${vc.project.name}
+vc.project.type = executable
+vc.project.pocobase = ..\\..\\..
+vc.project.platforms = Win32, x64, WinCE
+vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md
+vc.project.prototype = ${vc.project.name}_vs90.vcproj
+vc.project.compiler.include = ..\\..\\..\\Foundation\\include;..\\..\\..\\XML\\include;..\\..\\..\\Util\\include;..\\..\\..\\Net\\include;..\\..\\..\\NetSSL_Win\\include
+vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib
+vc.project.linker.dependencies.x64 = ws2_32.lib iphlpapi.lib
+vc.project.linker.dependencies.WinCE = ws2.lib iphlpapi.lib
+vc.project.linker.dependencies.debug_shared =
+vc.project.linker.dependencies.release_shared =
+vc.project.linker.dependencies.debug_static_md = Crypt32.lib
+vc.project.linker.dependencies.release_static_md = Crypt32.lib
+vc.project.linker.dependencies.debug_static_mt = Crypt32.lib
+vc.project.linker.dependencies.release_static_mt = Crypt32.lib
diff --git a/NetSSL_Win/samples/download/download_CE_vs90.vcproj b/NetSSL_Win/samples/download/download_CE_vs90.vcproj
new file mode 100644
index 000000000..141edeb2c
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_CE_vs90.vcproj
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj b/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj
new file mode 100644
index 000000000..dbc20cdbb
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj
@@ -0,0 +1,296 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V300
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ true
+ Speed
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj.filters b/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj.filters
new file mode 100644
index 000000000..cb21b84ff
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_WEC2013_vs110.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {a9402fc6-3846-4d7e-8dcb-faa944be7617}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj b/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj
new file mode 100644
index 000000000..a91417a83
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj
@@ -0,0 +1,296 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V310
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ true
+ Speed
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\downloadd.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\downloadd.pdb
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;Crypt32.lib;ws2.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\download.exe
+ ..\..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ mainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj.filters b/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj.filters
new file mode 100644
index 000000000..590911e48
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_WEC2013_vs120.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {7103524e-b35f-4887-9fda-6ace7d14de0d}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_vs100.vcxproj b/NetSSL_Win/samples/download/download_vs100.vcxproj
new file mode 100644
index 000000000..2c9841470
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs100.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin\
+ obj\$(Configuration)\
+ true
+ bin\
+ obj\$(Configuration)\
+ false
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\downloadd.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\downloadd.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\downloadd.pdb
+ Console
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_vs100.vcxproj.filters b/NetSSL_Win/samples/download/download_vs100.vcxproj.filters
new file mode 100644
index 000000000..1fd4f9682
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs100.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {1a8c3746-ce25-4458-a9f7-ff3dccf90906}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_vs110.vcxproj b/NetSSL_Win/samples/download/download_vs110.vcxproj
new file mode 100644
index 000000000..e79cd0138
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs110.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_vs110.vcxproj.filters b/NetSSL_Win/samples/download/download_vs110.vcxproj.filters
new file mode 100644
index 000000000..d19845a1f
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs110.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {8bd0f3a0-6464-46fe-ab52-07fdc496c8fc}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_vs120.vcxproj b/NetSSL_Win/samples/download/download_vs120.vcxproj
new file mode 100644
index 000000000..56d8541df
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs120.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_mt\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\downloadd.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\downloadd.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin\static_md\download.exe
+ ..\..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_vs120.vcxproj.filters b/NetSSL_Win/samples/download/download_vs120.vcxproj.filters
new file mode 100644
index 000000000..968bd75c3
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs120.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {24ddf62c-f590-41b4-af2d-ad922d97d7d5}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_vs71.vcproj b/NetSSL_Win/samples/download/download_vs71.vcproj
new file mode 100644
index 000000000..a4b1d9cea
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs71.vcproj
@@ -0,0 +1,405 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_vs80.vcproj b/NetSSL_Win/samples/download/download_vs80.vcproj
new file mode 100644
index 000000000..7264ac325
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs80.vcproj
@@ -0,0 +1,445 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_vs90.vcproj b/NetSSL_Win/samples/download/download_vs90.vcproj
new file mode 100644
index 000000000..88fb92377
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_vs90.vcproj
@@ -0,0 +1,445 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_x64_vs100.vcxproj b/NetSSL_Win/samples/download/download_x64_vs100.vcxproj
new file mode 100644
index 000000000..b3ebb534e
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs100.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin64\
+ obj64\$(Configuration)\
+ true
+ bin64\
+ obj64\$(Configuration)\
+ false
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\downloadd.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\downloadd.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\downloadd.pdb
+ Console
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_x64_vs100.vcxproj.filters b/NetSSL_Win/samples/download/download_x64_vs100.vcxproj.filters
new file mode 100644
index 000000000..97bb5e69f
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs100.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {c3f6bd78-9b8f-4c00-94af-0c14ff54e02b}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_x64_vs110.vcxproj b/NetSSL_Win/samples/download/download_x64_vs110.vcxproj
new file mode 100644
index 000000000..10a97f3f3
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs110.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_x64_vs110.vcxproj.filters b/NetSSL_Win/samples/download/download_x64_vs110.vcxproj.filters
new file mode 100644
index 000000000..b140c9f41
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs110.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {33379d1d-413c-42af-976b-ba3256089035}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_x64_vs120.vcxproj b/NetSSL_Win/samples/download/download_x64_vs120.vcxproj
new file mode 100644
index 000000000..92e2ce4c5
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs120.vcxproj
@@ -0,0 +1,311 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ download
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}
+ download
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ downloadd
+ downloadd
+ downloadd
+ download
+ download
+ download
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_mt\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\downloadd.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\downloadd.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ .\include;..\..\..\Foundation\include;..\..\..\XML\include;..\..\..\Util\include;..\..\..\Net\include;..\..\..\NetSSL_Win\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0500;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ iphlpapi.lib;winmm.lib;Crypt32.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)
+ bin64\static_md\download.exe
+ ..\..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/download_x64_vs120.vcxproj.filters b/NetSSL_Win/samples/download/download_x64_vs120.vcxproj.filters
new file mode 100644
index 000000000..3fa25a031
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs120.vcxproj.filters
@@ -0,0 +1,13 @@
+
+
+
+
+ {1e12c901-3c86-4560-9d2f-44fdca68449e}
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/samples/download/download_x64_vs90.vcproj b/NetSSL_Win/samples/download/download_x64_vs90.vcproj
new file mode 100644
index 000000000..f18cef4d5
--- /dev/null
+++ b/NetSSL_Win/samples/download/download_x64_vs90.vcproj
@@ -0,0 +1,445 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/samples/download/src/download.cpp b/NetSSL_Win/samples/download/src/download.cpp
new file mode 100644
index 000000000..5fbe0470e
--- /dev/null
+++ b/NetSSL_Win/samples/download/src/download.cpp
@@ -0,0 +1,93 @@
+//
+// download.cpp
+//
+// $Id: //poco/1.4/NetSSL_OpenSSL/samples/download/src/download.cpp#1 $
+//
+// This sample demonstrates the URIStreamOpener class.
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/URIStreamOpener.h"
+#include "Poco/StreamCopier.h"
+#include "Poco/Path.h"
+#include "Poco/URI.h"
+#include "Poco/SharedPtr.h"
+#include "Poco/Exception.h"
+#include "Poco/Net/HTTPStreamFactory.h"
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include "Poco/Net/FTPStreamFactory.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include
+#include
+
+
+using Poco::URIStreamOpener;
+using Poco::StreamCopier;
+using Poco::Path;
+using Poco::URI;
+using Poco::SharedPtr;
+using Poco::Exception;
+using Poco::Net::HTTPStreamFactory;
+using Poco::Net::HTTPSStreamFactory;
+using Poco::Net::FTPStreamFactory;
+using Poco::Net::SSLManager;
+using Poco::Net::Context;
+using Poco::Net::InvalidCertificateHandler;
+using Poco::Net::ConsoleCertificateHandler;
+
+
+class SSLInitializer
+{
+public:
+ SSLInitializer()
+ {
+ Poco::Net::initializeSSL();
+ }
+
+ ~SSLInitializer()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+};
+
+
+int main(int argc, char** argv)
+{
+ SSLInitializer sslInitializer;
+ HTTPStreamFactory::registerFactory();
+ HTTPSStreamFactory::registerFactory();
+ FTPStreamFactory::registerFactory();
+
+ if (argc != 2)
+ {
+ Path p(argv[0]);
+ std::cerr << "usage: " << p.getBaseName() << " " << std::endl;
+ std::cerr << " Download to standard output." << std::endl;
+ std::cerr << " Works with http, https, ftp and file URIs." << std::endl;
+ return 1;
+ }
+
+ SharedPtr pCertHandler = new ConsoleCertificateHandler(false); // ask the user via console
+ Context::Ptr pContext = new Context(Context::CLIENT_USE, "");
+ SSLManager::instance().initializeClient(pCertHandler, pContext);
+
+ try
+ {
+ URI uri(argv[1]);
+ std::auto_ptr pStr(URIStreamOpener::defaultOpener().open(uri));
+ StreamCopier::copyStream(*pStr.get(), std::cout);
+ }
+ catch (Exception& exc)
+ {
+ std::cerr << exc.displayText() << std::endl;
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/NetSSL_Win/samples/samples.progen b/NetSSL_Win/samples/samples.progen
new file mode 100644
index 000000000..7bb3a564e
--- /dev/null
+++ b/NetSSL_Win/samples/samples.progen
@@ -0,0 +1,7 @@
+vc.project.platforms = Win32, x64, WinCE
+vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md
+vc.solution.create = true
+vc.solution.include = \
+ download\\download;\
+ HTTPSTimeServer\\HTTPSTimeServer;\
+ Mail\\Mail
diff --git a/NetSSL_Win/samples/samples_CE_vs90.sln b/NetSSL_Win/samples/samples_CE_vs90.sln
new file mode 100644
index 000000000..1a96370ea
--- /dev/null
+++ b/NetSSL_Win/samples/samples_CE_vs90.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_CE_vs90.vcproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_CE_vs90.vcproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_CE_vs90.vcproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Digi JumpStart (ARMV4I) = debug_shared|Digi JumpStart (ARMV4I)
+ release_shared|Digi JumpStart (ARMV4I) = release_shared|Digi JumpStart (ARMV4I)
+ debug_static_mt|Digi JumpStart (ARMV4I) = debug_static_mt|Digi JumpStart (ARMV4I)
+ release_static_mt|Digi JumpStart (ARMV4I) = release_static_mt|Digi JumpStart (ARMV4I)
+ debug_static_md|Digi JumpStart (ARMV4I) = debug_static_md|Digi JumpStart (ARMV4I)
+ release_static_md|Digi JumpStart (ARMV4I) = release_static_md|Digi JumpStart (ARMV4I)
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Digi JumpStart (ARMV4I).ActiveCfg = debug_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Digi JumpStart (ARMV4I).Build.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Digi JumpStart (ARMV4I).Deploy.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Digi JumpStart (ARMV4I).ActiveCfg = release_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Digi JumpStart (ARMV4I).Build.0 = release_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Digi JumpStart (ARMV4I).Deploy.0 = release_shared|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Digi JumpStart (ARMV4I).Build.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = release_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Digi JumpStart (ARMV4I).Build.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_md|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Digi JumpStart (ARMV4I).Build.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Digi JumpStart (ARMV4I).ActiveCfg = release_static_md|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Digi JumpStart (ARMV4I).Build.0 = release_static_md|Digi JumpStart (ARMV4I)
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Digi JumpStart (ARMV4I).Deploy.0 = release_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Digi JumpStart (ARMV4I).ActiveCfg = debug_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Digi JumpStart (ARMV4I).Build.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Digi JumpStart (ARMV4I).Deploy.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Digi JumpStart (ARMV4I).ActiveCfg = release_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Digi JumpStart (ARMV4I).Build.0 = release_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Digi JumpStart (ARMV4I).Deploy.0 = release_shared|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Digi JumpStart (ARMV4I).Build.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = release_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Digi JumpStart (ARMV4I).Build.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Digi JumpStart (ARMV4I).Build.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Digi JumpStart (ARMV4I).ActiveCfg = release_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Digi JumpStart (ARMV4I).Build.0 = release_static_md|Digi JumpStart (ARMV4I)
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Digi JumpStart (ARMV4I).Deploy.0 = release_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Digi JumpStart (ARMV4I).ActiveCfg = debug_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Digi JumpStart (ARMV4I).Build.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Digi JumpStart (ARMV4I).Deploy.0 = debug_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Digi JumpStart (ARMV4I).ActiveCfg = release_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Digi JumpStart (ARMV4I).Build.0 = release_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Digi JumpStart (ARMV4I).Deploy.0 = release_shared|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Digi JumpStart (ARMV4I).Build.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Digi JumpStart (ARMV4I).ActiveCfg = release_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Digi JumpStart (ARMV4I).Build.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Digi JumpStart (ARMV4I).Deploy.0 = release_static_mt|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Digi JumpStart (ARMV4I).ActiveCfg = debug_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Digi JumpStart (ARMV4I).Build.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Digi JumpStart (ARMV4I).Deploy.0 = debug_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Digi JumpStart (ARMV4I).ActiveCfg = release_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Digi JumpStart (ARMV4I).Build.0 = release_static_md|Digi JumpStart (ARMV4I)
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Digi JumpStart (ARMV4I).Deploy.0 = release_static_md|Digi JumpStart (ARMV4I)
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_WEC2013_vs110.sln b/NetSSL_Win/samples/samples_WEC2013_vs110.sln
new file mode 100644
index 000000000..a436efb1f
--- /dev/null
+++ b/NetSSL_Win/samples/samples_WEC2013_vs110.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_WEC2013_vs110.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_WEC2013_vs110.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_WEC2013_vs110.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|SDK_AM335X_SK_WEC2013_V300 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ release_shared|SDK_AM335X_SK_WEC2013_V300 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ debug_static_mt|SDK_AM335X_SK_WEC2013_V300 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ release_static_mt|SDK_AM335X_SK_WEC2013_V300 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ debug_static_md|SDK_AM335X_SK_WEC2013_V300 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ release_static_md|SDK_AM335X_SK_WEC2013_V300 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V300.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V300.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V300
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_WEC2013_vs120.sln b/NetSSL_Win/samples/samples_WEC2013_vs120.sln
new file mode 100644
index 000000000..3f5246c6e
--- /dev/null
+++ b/NetSSL_Win/samples/samples_WEC2013_vs120.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_WEC2013_vs120.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_WEC2013_vs120.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_WEC2013_vs120.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|SDK_AM335X_SK_WEC2013_V310 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ release_shared|SDK_AM335X_SK_WEC2013_V310 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ debug_static_mt|SDK_AM335X_SK_WEC2013_V310 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ release_static_mt|SDK_AM335X_SK_WEC2013_V310 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ debug_static_md|SDK_AM335X_SK_WEC2013_V310 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ release_static_md|SDK_AM335X_SK_WEC2013_V310 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_shared|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_mt|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = debug_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V310.ActiveCfg = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Build.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|SDK_AM335X_SK_WEC2013_V310.Deploy.0 = release_static_md|SDK_AM335X_SK_WEC2013_V310
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs100.sln b/NetSSL_Win/samples/samples_vs100.sln
new file mode 100644
index 000000000..37d5deab0
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs100.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs100.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs100.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs100.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Win32 = debug_shared|Win32
+ release_shared|Win32 = release_shared|Win32
+ debug_static_mt|Win32 = debug_static_mt|Win32
+ release_static_mt|Win32 = release_static_mt|Win32
+ debug_static_md|Win32 = debug_static_md|Win32
+ release_static_md|Win32 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs110.sln b/NetSSL_Win/samples/samples_vs110.sln
new file mode 100644
index 000000000..ed247c027
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs110.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs110.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs110.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs110.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Win32 = debug_shared|Win32
+ release_shared|Win32 = release_shared|Win32
+ debug_static_mt|Win32 = debug_static_mt|Win32
+ release_static_mt|Win32 = release_static_mt|Win32
+ debug_static_md|Win32 = debug_static_md|Win32
+ release_static_md|Win32 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs120.sln b/NetSSL_Win/samples/samples_vs120.sln
new file mode 100644
index 000000000..3db78f8b7
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs120.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs120.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs120.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs120.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Win32 = debug_shared|Win32
+ release_shared|Win32 = release_shared|Win32
+ debug_static_mt|Win32 = debug_static_mt|Win32
+ release_static_mt|Win32 = release_static_mt|Win32
+ debug_static_md|Win32 = debug_static_md|Win32
+ release_static_md|Win32 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs71.sln b/NetSSL_Win/samples/samples_vs71.sln
new file mode 100644
index 000000000..66c343eae
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs71.sln
@@ -0,0 +1,65 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs71.vcproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs71.vcproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs71.vcproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ debug_shared = debug_shared
+ release_shared = release_shared
+ debug_static_mt = debug_static_mt
+ release_static_mt = release_static_mt
+ debug_static_md = debug_static_md
+ release_static_md = release_static_md
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md.Build.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs80.sln b/NetSSL_Win/samples/samples_vs80.sln
new file mode 100644
index 000000000..de8a399ba
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs80.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs80.vcproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs80.vcproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs80.vcproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Win32 = debug_shared|Win32
+ release_shared|Win32 = release_shared|Win32
+ debug_static_mt|Win32 = debug_static_mt|Win32
+ release_static_mt|Win32 = release_static_mt|Win32
+ debug_static_md|Win32 = debug_static_md|Win32
+ release_static_md|Win32 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_vs90.sln b/NetSSL_Win/samples/samples_vs90.sln
new file mode 100644
index 000000000..ed82012a1
--- /dev/null
+++ b/NetSSL_Win/samples/samples_vs90.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_vs90.vcproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_vs90.vcproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_vs90.vcproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|Win32 = debug_shared|Win32
+ release_shared|Win32 = release_shared|Win32
+ debug_static_mt|Win32 = debug_static_mt|Win32
+ release_static_mt|Win32 = release_static_mt|Win32
+ debug_static_md|Win32 = debug_static_md|Win32
+ release_static_md|Win32 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Build.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Build.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.ActiveCfg = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Build.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|Win32.Deploy.0 = debug_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.ActiveCfg = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Build.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|Win32.Deploy.0 = release_shared|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.ActiveCfg = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Build.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|Win32.Deploy.0 = debug_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.ActiveCfg = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Build.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|Win32.Deploy.0 = release_static_mt|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.ActiveCfg = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Build.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|Win32.Deploy.0 = debug_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.ActiveCfg = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Build.0 = release_static_md|Win32
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|Win32.Deploy.0 = release_static_md|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_x64_vs100.sln b/NetSSL_Win/samples/samples_x64_vs100.sln
new file mode 100644
index 000000000..878c4752d
--- /dev/null
+++ b/NetSSL_Win/samples/samples_x64_vs100.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_x64_vs100.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_x64_vs100.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_x64_vs100.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|x64 = debug_shared|x64
+ release_shared|x64 = release_shared|x64
+ debug_static_mt|x64 = debug_static_mt|x64
+ release_static_mt|x64 = release_static_mt|x64
+ debug_static_md|x64 = debug_static_md|x64
+ release_static_md|x64 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Build.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.ActiveCfg = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Build.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Deploy.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Build.0 = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Build.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.ActiveCfg = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Build.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Deploy.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Build.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Build.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.ActiveCfg = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Build.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Deploy.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Build.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_x64_vs110.sln b/NetSSL_Win/samples/samples_x64_vs110.sln
new file mode 100644
index 000000000..d93b615ca
--- /dev/null
+++ b/NetSSL_Win/samples/samples_x64_vs110.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_x64_vs110.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_x64_vs110.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_x64_vs110.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|x64 = debug_shared|x64
+ release_shared|x64 = release_shared|x64
+ debug_static_mt|x64 = debug_static_mt|x64
+ release_static_mt|x64 = release_static_mt|x64
+ debug_static_md|x64 = debug_static_md|x64
+ release_static_md|x64 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Build.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.ActiveCfg = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Build.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Deploy.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Build.0 = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Build.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.ActiveCfg = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Build.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Deploy.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Build.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Build.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.ActiveCfg = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Build.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Deploy.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Build.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_x64_vs120.sln b/NetSSL_Win/samples/samples_x64_vs120.sln
new file mode 100644
index 000000000..c03e39656
--- /dev/null
+++ b/NetSSL_Win/samples/samples_x64_vs120.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_x64_vs120.vcxproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_x64_vs120.vcxproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_x64_vs120.vcxproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|x64 = debug_shared|x64
+ release_shared|x64 = release_shared|x64
+ debug_static_mt|x64 = debug_static_mt|x64
+ release_static_mt|x64 = release_static_mt|x64
+ debug_static_md|x64 = debug_static_md|x64
+ release_static_md|x64 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Build.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.ActiveCfg = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Build.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Deploy.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Build.0 = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Build.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.ActiveCfg = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Build.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Deploy.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Build.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Build.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.ActiveCfg = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Build.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Deploy.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Build.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/samples/samples_x64_vs90.sln b/NetSSL_Win/samples/samples_x64_vs90.sln
new file mode 100644
index 000000000..6b6324728
--- /dev/null
+++ b/NetSSL_Win/samples/samples_x64_vs90.sln
@@ -0,0 +1,77 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "download", "download\download_x64_vs90.vcproj", "{D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPSTimeServer", "HTTPSTimeServer\HTTPSTimeServer_x64_vs90.vcproj", "{F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mail", "Mail\Mail_x64_vs90.vcproj", "{BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug_shared|x64 = debug_shared|x64
+ release_shared|x64 = release_shared|x64
+ debug_static_mt|x64 = debug_static_mt|x64
+ release_static_mt|x64 = release_static_mt|x64
+ debug_static_md|x64 = debug_static_md|x64
+ release_static_md|x64 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Build.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.ActiveCfg = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Build.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_shared|x64.Deploy.0 = release_shared|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Build.0 = release_static_md|x64
+ {D853F3D6-0D6F-3E8E-82C7-4216D7A21C4D}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Build.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.ActiveCfg = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Build.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_shared|x64.Deploy.0 = release_shared|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Build.0 = release_static_md|x64
+ {F8DE5054-3EC1-3FB4-9FE6-38EE974745A9}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.ActiveCfg = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Build.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_shared|x64.Deploy.0 = debug_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.ActiveCfg = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Build.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_shared|x64.Deploy.0 = release_shared|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Build.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Build.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.ActiveCfg = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Build.0 = release_static_md|x64
+ {BF75C029-EFC9-3A0F-A8F2-8001C11D1FBA}.release_static_md|x64.Deploy.0 = release_static_md|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NetSSL_Win/src/AcceptCertificateHandler.cpp b/NetSSL_Win/src/AcceptCertificateHandler.cpp
new file mode 100644
index 000000000..923e6b318
--- /dev/null
+++ b/NetSSL_Win/src/AcceptCertificateHandler.cpp
@@ -0,0 +1,40 @@
+//
+// AcceptCertificateHandler.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/AcceptCertificateHandler.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: AcceptCertificateHandler
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/AcceptCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+AcceptCertificateHandler::AcceptCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+AcceptCertificateHandler::~AcceptCertificateHandler()
+{
+}
+
+
+void AcceptCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ errorCert.setIgnoreError(true);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/CertificateHandlerFactory.cpp b/NetSSL_Win/src/CertificateHandlerFactory.cpp
new file mode 100644
index 000000000..8d37e0ded
--- /dev/null
+++ b/NetSSL_Win/src/CertificateHandlerFactory.cpp
@@ -0,0 +1,46 @@
+//
+// CertificateHandlerFactory.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/CertificateHandlerFactory.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: CertificateHandlerFactory
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/CertificateHandlerFactory.h"
+#include "Poco/Net/SSLManager.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+CertificateHandlerFactory::CertificateHandlerFactory()
+{
+}
+
+
+CertificateHandlerFactory::~CertificateHandlerFactory()
+{
+}
+
+
+CertificateHandlerFactoryRegistrar::CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory)
+{
+ SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, pFactory);
+}
+
+
+CertificateHandlerFactoryRegistrar::~CertificateHandlerFactoryRegistrar()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/CertificateHandlerFactoryMgr.cpp b/NetSSL_Win/src/CertificateHandlerFactoryMgr.cpp
new file mode 100644
index 000000000..04c4e240d
--- /dev/null
+++ b/NetSSL_Win/src/CertificateHandlerFactoryMgr.cpp
@@ -0,0 +1,71 @@
+//
+// CertificateHandlerFactoryMgr.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/CertificateHandlerFactoryMgr.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: CertificateHandlerFactoryMgr
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/CertificateHandlerFactoryMgr.h"
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include "Poco/Net/AcceptCertificateHandler.h"
+#include "Poco/Net/RejectCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+CertificateHandlerFactoryMgr::CertificateHandlerFactoryMgr()
+{
+ setFactory("ConsoleCertificateHandler", new CertificateHandlerFactoryImpl());
+ setFactory("AcceptCertificateHandler", new CertificateHandlerFactoryImpl());
+ setFactory("RejectCertificateHandler", new CertificateHandlerFactoryImpl());
+}
+
+
+CertificateHandlerFactoryMgr::~CertificateHandlerFactoryMgr()
+{
+}
+
+
+void CertificateHandlerFactoryMgr::setFactory(const std::string& name, CertificateHandlerFactory* pFactory)
+{
+ bool success = _factories.insert(make_pair(name, Poco::SharedPtr(pFactory))).second;
+ if (!success)
+ delete pFactory;
+ poco_assert(success);
+}
+
+
+bool CertificateHandlerFactoryMgr::hasFactory(const std::string& name) const
+{
+ return _factories.find(name) != _factories.end();
+}
+
+
+const CertificateHandlerFactory* CertificateHandlerFactoryMgr::getFactory(const std::string& name) const
+{
+ FactoriesMap::const_iterator it = _factories.find(name);
+ if (it != _factories.end())
+ return it->second;
+ else
+ return 0;
+}
+
+
+void CertificateHandlerFactoryMgr::removeFactory(const std::string& name)
+{
+ _factories.erase(name);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/ConsoleCertificateHandler.cpp b/NetSSL_Win/src/ConsoleCertificateHandler.cpp
new file mode 100644
index 000000000..17995018b
--- /dev/null
+++ b/NetSSL_Win/src/ConsoleCertificateHandler.cpp
@@ -0,0 +1,55 @@
+//
+// ConsoleCertificateHandler.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/ConsoleCertificateHandler.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: ConsoleCertificateHandler
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include
+
+
+namespace Poco {
+namespace Net {
+
+
+ConsoleCertificateHandler::ConsoleCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+ConsoleCertificateHandler::~ConsoleCertificateHandler()
+{
+}
+
+
+void ConsoleCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ const X509Certificate& aCert = errorCert.certificate();
+ std::cout << "\n";
+ std::cout << "WARNING: Certificate verification failed\n";
+ std::cout << "----------------------------------------\n";
+ std::cout << "Issuer Name: " << aCert.issuerName() << "\n";
+ std::cout << "Subject Name: " << aCert.subjectName() << "\n\n";
+ std::cout << "The certificate yielded the error: " << errorCert.errorMessage() << "\n\n";
+ std::cout << "The error occurred in the certificate chain at position " << errorCert.errorDepth() << "\n";
+ std::cout << "Accept the certificate (y,n)? ";
+ char c;
+ std::cin >> c;
+ if (c == 'y' || c == 'Y')
+ errorCert.setIgnoreError(true);
+ else
+ errorCert.setIgnoreError(false);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/Context.cpp b/NetSSL_Win/src/Context.cpp
new file mode 100644
index 000000000..9fdfc1cde
--- /dev/null
+++ b/NetSSL_Win/src/Context.cpp
@@ -0,0 +1,104 @@
+//
+// Context.cpp
+//
+// $Id: //poco/1.4/NetSSL_Schannel/src/Context.cpp#1 $
+//
+// Library: NetSSL_Schannel
+// Package: SSLCore
+// Module: Context
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/Context.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/UnicodeConverter.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string Context::CERT_STORE_MY("MY");
+const std::string Context::CERT_STORE_ROOT("ROOT");
+const std::string Context::CERT_STORE_TRUST("TRUST");
+const std::string Context::CERT_STORE_CA("CA");
+const std::string Context::CERT_STORE_USERDS("USERDS");
+
+
+Context::Context(Usage usage,
+ const std::string& certName,
+ VerificationMode verMode,
+ int options,
+ const std::string& certStore):
+ _usage(usage),
+ _mode(verMode),
+ _options(options),
+ _certificateName(certName),
+ _certificateStoreName(certStore),
+ _hMemCertStore(0),
+ _hCollectionCertStore(0),
+ _hRootCertStore(0),
+ _mutex()
+{
+ _hMemCertStore = CertOpenStore(
+ CERT_STORE_PROV_MEMORY, // The memory provider type
+ 0, // The encoding type is not needed
+ NULL, // Use the default provider
+ 0, // Accept the default dwFlags
+ NULL); // pvPara is not used
+
+ if (!_hMemCertStore)
+ throw SSLException("Failed to create memory certificate store", GetLastError());
+
+ _hCollectionCertStore = CertOpenStore(
+ CERT_STORE_PROV_COLLECTION, // A collection store
+ 0, // Encoding type; not used with a collection store
+ NULL, // Use the default provider
+ 0, // No flags
+ NULL); // Not needed
+
+ if (!_hCollectionCertStore)
+ throw SSLException("Failed to create collection store", GetLastError());
+
+ if (!CertAddStoreToCollection(_hCollectionCertStore, _hMemCertStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1))
+ throw SSLException("Failed to add memory certificate store to collection store", GetLastError());
+
+ if (_options & OPT_TRUST_ROOTS_WIN_CERT_STORE)
+ {
+ // add root certificates
+ std::wstring rootStore;
+ Poco::UnicodeConverter::convert(CERT_STORE_ROOT, rootStore);
+ _hRootCertStore = CertOpenSystemStoreW(0, rootStore.c_str());
+ if (!_hRootCertStore)
+ throw SSLException("Failed to open root certificate store", GetLastError());
+ if (!CertAddStoreToCollection(_hCollectionCertStore, _hRootCertStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1))
+ throw SSLException("Failed to add root certificate store to collection store", GetLastError());
+ }
+}
+
+
+Context::~Context()
+{
+ CertCloseStore(_hCollectionCertStore, 0);
+ CertCloseStore(_hMemCertStore, 0);
+ if (_hRootCertStore)
+ {
+ CertCloseStore(_hRootCertStore, 0);
+ }
+}
+
+
+void Context::addTrustedCert(const Poco::Net::X509Certificate& cert)
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+ CertAddCertificateContextToStore(_hMemCertStore, cert.system(), CERT_STORE_ADD_REPLACE_EXISTING, 0);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/HTTPSClientSession.cpp b/NetSSL_Win/src/HTTPSClientSession.cpp
new file mode 100644
index 000000000..07e66143c
--- /dev/null
+++ b/NetSSL_Win/src/HTTPSClientSession.cpp
@@ -0,0 +1,192 @@
+//
+// HTTPSClientSession.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/HTTPSClientSession.cpp#3 $
+//
+// Library: NetSSL_Win
+// Package: HTTPSClient
+// Module: HTTPSClientSession
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/NumberFormatter.h"
+
+
+using Poco::NumberFormatter;
+using Poco::IllegalStateException;
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSClientSession::HTTPSClientSession():
+ HTTPClientSession(SecureStreamSocket()),
+ _pContext(SSLManager::instance().defaultClientContext())
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket):
+ HTTPClientSession(socket),
+ _pContext(socket.context())
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession):
+ HTTPClientSession(socket),
+ _pContext(socket.context()),
+ _pSession(pSession)
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port):
+ HTTPClientSession(SecureStreamSocket()),
+ _pContext(SSLManager::instance().defaultClientContext())
+{
+ setHost(host);
+ setPort(port);
+ SecureStreamSocket sss(socket());
+ sss.setPeerHostName(host);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext):
+ HTTPClientSession(SecureStreamSocket(pContext)),
+ _pContext(pContext)
+{
+}
+
+
+HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession):
+ HTTPClientSession(SecureStreamSocket(pContext, pSession)),
+ _pContext(pContext),
+ _pSession(pSession)
+{
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext):
+ HTTPClientSession(SecureStreamSocket(pContext)),
+ _pContext(pContext)
+{
+ setHost(host);
+ setPort(port);
+ SecureStreamSocket sss(socket());
+ sss.setPeerHostName(host);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession):
+ HTTPClientSession(SecureStreamSocket(pContext, pSession)),
+ _pContext(pContext),
+ _pSession(pSession)
+{
+ setHost(host);
+ setPort(port);
+ SecureStreamSocket sss(socket());
+ sss.setPeerHostName(host);
+}
+
+
+HTTPSClientSession::~HTTPSClientSession()
+{
+}
+
+
+bool HTTPSClientSession::secure() const
+{
+ return true;
+}
+
+
+void HTTPSClientSession::abort()
+{
+ SecureStreamSocket sss(socket());
+ sss.abort();
+}
+
+
+X509Certificate HTTPSClientSession::serverCertificate()
+{
+ SecureStreamSocket sss(socket());
+ return sss.peerCertificate();
+}
+
+
+std::string HTTPSClientSession::proxyRequestPrefix() const
+{
+ return std::string();
+}
+
+
+void HTTPSClientSession::proxyAuthenticate(HTTPRequest& request)
+{
+}
+
+
+void HTTPSClientSession::connect(const SocketAddress& address)
+{
+ if (getProxyHost().empty())
+ {
+ SecureStreamSocket sss(socket());
+ if (_pContext->sessionCacheEnabled())
+ {
+ sss.useSession(_pSession);
+ }
+ HTTPSession::connect(address);
+ if (_pContext->sessionCacheEnabled())
+ {
+ _pSession = sss.currentSession();
+ }
+ }
+ else
+ {
+ StreamSocket proxySocket(proxyConnect());
+ SecureStreamSocket secureSocket = SecureStreamSocket::attach(proxySocket, getHost(), _pContext, _pSession);
+ attachSocket(secureSocket);
+ if (_pContext->sessionCacheEnabled())
+ {
+ _pSession = secureSocket.currentSession();
+ }
+ }
+}
+
+
+int HTTPSClientSession::read(char* buffer, std::streamsize length)
+{
+ try
+ {
+ return HTTPSession::read(buffer, length);
+ } catch(SSLConnectionUnexpectedlyClosedException&)
+ {
+ return 0;
+ }
+}
+
+
+Session::Ptr HTTPSClientSession::sslSession()
+{
+ return _pSession;
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/HTTPSSessionInstantiator.cpp b/NetSSL_Win/src/HTTPSSessionInstantiator.cpp
new file mode 100644
index 000000000..999dee9a0
--- /dev/null
+++ b/NetSSL_Win/src/HTTPSSessionInstantiator.cpp
@@ -0,0 +1,70 @@
+//
+// HTTPSSessionInstantiator.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/HTTPSSessionInstantiator.cpp#2 $
+//
+// Library: NetSSL_Win
+// Package: HTTPSClient
+// Module: HTTPSSessionInstantiator
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSSessionInstantiator.h"
+#include "Poco/Net/HTTPSessionFactory.h"
+#include "Poco/Net/HTTPSClientSession.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSSessionInstantiator::HTTPSSessionInstantiator()
+{
+}
+
+
+HTTPSSessionInstantiator::HTTPSSessionInstantiator(Context::Ptr pContext) :
+ _pContext(pContext)
+{
+}
+
+
+HTTPSSessionInstantiator::~HTTPSSessionInstantiator()
+{
+}
+
+
+HTTPClientSession* HTTPSSessionInstantiator::createClientSession(const Poco::URI& uri)
+{
+ poco_assert (uri.getScheme() == "https");
+ HTTPSClientSession* pSession = _pContext.isNull() ? new HTTPSClientSession(uri.getHost(), uri.getPort()) : new HTTPSClientSession(uri.getHost(), uri.getPort(), _pContext);
+ pSession->setProxy(proxyHost(), proxyPort());
+ pSession->setProxyCredentials(proxyUsername(), proxyPassword());
+ return pSession;
+}
+
+
+void HTTPSSessionInstantiator::registerInstantiator()
+{
+ HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator);
+}
+
+
+void HTTPSSessionInstantiator::registerInstantiator(Context::Ptr context)
+{
+ HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator(context));
+}
+
+
+void HTTPSSessionInstantiator::unregisterInstantiator()
+{
+ HTTPSessionFactory::defaultFactory().unregisterProtocol("https");
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/HTTPSStreamFactory.cpp b/NetSSL_Win/src/HTTPSStreamFactory.cpp
new file mode 100644
index 000000000..5e2367252
--- /dev/null
+++ b/NetSSL_Win/src/HTTPSStreamFactory.cpp
@@ -0,0 +1,174 @@
+//
+// HTTPSStreamFactory.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/HTTPSStreamFactory.cpp#2 $
+//
+// Library: NetSSL_Win
+// Package: HTTPSClient
+// Module: HTTPSStreamFactory
+//
+// Copyright (c) 2006-2012, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/HTTPIOStream.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/HTTPCredentials.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/URI.h"
+#include "Poco/URIStreamOpener.h"
+#include "Poco/UnbufferedStreamBuf.h"
+#include "Poco/NullStream.h"
+#include "Poco/StreamCopier.h"
+
+
+using Poco::URIStreamFactory;
+using Poco::URI;
+using Poco::URIStreamOpener;
+using Poco::UnbufferedStreamBuf;
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSStreamFactory::HTTPSStreamFactory():
+ _proxyPort(HTTPSession::HTTP_PORT)
+{
+}
+
+
+HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort):
+ _proxyHost(proxyHost),
+ _proxyPort(proxyPort)
+{
+}
+
+
+HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword):
+ _proxyHost(proxyHost),
+ _proxyPort(proxyPort),
+ _proxyUsername(proxyUsername),
+ _proxyPassword(proxyPassword)
+{
+}
+
+
+HTTPSStreamFactory::~HTTPSStreamFactory()
+{
+}
+
+
+std::istream* HTTPSStreamFactory::open(const URI& uri)
+{
+ poco_assert (uri.getScheme() == "https" || uri.getScheme() == "http");
+
+ URI resolvedURI(uri);
+ URI proxyUri;
+ HTTPClientSession* pSession = 0;
+ HTTPResponse res;
+ try
+ {
+ bool retry = false;
+ bool authorize = false;
+ int redirects = 0;
+ std::string username;
+ std::string password;
+
+ do
+ {
+ if (!pSession)
+ {
+ if (resolvedURI.getScheme() != "http")
+ pSession = new HTTPSClientSession(resolvedURI.getHost(), resolvedURI.getPort());
+ else
+ pSession = new HTTPClientSession(resolvedURI.getHost(), resolvedURI.getPort());
+ if (proxyUri.empty())
+ pSession->setProxy(_proxyHost, _proxyPort);
+ else
+ pSession->setProxy(proxyUri.getHost(), proxyUri.getPort());
+ pSession->setProxyCredentials(_proxyUsername, _proxyPassword);
+ }
+ std::string path = resolvedURI.getPathAndQuery();
+ if (path.empty()) path = "/";
+ HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
+
+ if (authorize)
+ {
+ HTTPCredentials::extractCredentials(uri, username, password);
+ HTTPCredentials cred(username, password);
+ cred.authenticate(req, res);
+ }
+
+ pSession->sendRequest(req);
+ std::istream& rs = pSession->receiveResponse(res);
+ bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
+ res.getStatus() == HTTPResponse::HTTP_FOUND ||
+ res.getStatus() == HTTPResponse::HTTP_SEE_OTHER ||
+ res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT);
+ if (moved)
+ {
+ resolvedURI.resolve(res.get("Location"));
+ if (!username.empty())
+ {
+ resolvedURI.setUserInfo(username + ":" + password);
+ authorize = false;
+ }
+ delete pSession; pSession = 0;
+ ++redirects;
+ retry = true;
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_OK)
+ {
+ return new HTTPResponseStream(rs, pSession);
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_USEPROXY && !retry)
+ {
+ // The requested resource MUST be accessed through the proxy
+ // given by the Location field. The Location field gives the
+ // URI of the proxy. The recipient is expected to repeat this
+ // single request via the proxy. 305 responses MUST only be generated by origin servers.
+ // only use for one single request!
+ proxyUri.resolve(res.get("Location"));
+ delete pSession; pSession = 0;
+ retry = true; // only allow useproxy once
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED && !authorize)
+ {
+ authorize = true;
+ retry = true;
+ Poco::NullOutputStream null;
+ Poco::StreamCopier::copyStream(rs, null);
+ }
+ else throw HTTPException(res.getReason(), uri.toString());
+ }
+ while (retry && redirects < MAX_REDIRECTS);
+ throw HTTPException("Too many redirects", uri.toString());
+ }
+ catch (...)
+ {
+ delete pSession;
+ throw;
+ }
+}
+
+
+void HTTPSStreamFactory::registerFactory()
+{
+ URIStreamOpener::defaultOpener().registerStreamFactory("https", new HTTPSStreamFactory);
+}
+
+
+void HTTPSStreamFactory::unregisterFactory()
+{
+ URIStreamOpener::defaultOpener().unregisterStreamFactory("https");
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/InvalidCertificateHandler.cpp b/NetSSL_Win/src/InvalidCertificateHandler.cpp
new file mode 100644
index 000000000..8397ecff9
--- /dev/null
+++ b/NetSSL_Win/src/InvalidCertificateHandler.cpp
@@ -0,0 +1,47 @@
+//
+// InvalidCertificateHandler.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/InvalidCertificateHandler.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: InvalidCertificateHandler
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/InvalidCertificateHandler.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Delegate.h"
+
+
+using Poco::Delegate;
+
+
+namespace Poco {
+namespace Net {
+
+
+InvalidCertificateHandler::InvalidCertificateHandler(bool handleErrorsOnServerSide): _handleErrorsOnServerSide(handleErrorsOnServerSide)
+{
+ if (_handleErrorsOnServerSide)
+ SSLManager::instance().ServerVerificationError += Delegate(this, &InvalidCertificateHandler::onInvalidCertificate);
+ else
+ SSLManager::instance().ClientVerificationError += Delegate(this, &InvalidCertificateHandler::onInvalidCertificate);
+}
+
+
+InvalidCertificateHandler::~InvalidCertificateHandler()
+{
+ if (_handleErrorsOnServerSide)
+ SSLManager::instance().ServerVerificationError -= Delegate(this, &InvalidCertificateHandler::onInvalidCertificate);
+ else
+ SSLManager::instance().ClientVerificationError -= Delegate(this, &InvalidCertificateHandler::onInvalidCertificate);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/RejectCertificateHandler.cpp b/NetSSL_Win/src/RejectCertificateHandler.cpp
new file mode 100644
index 000000000..e7dd84edf
--- /dev/null
+++ b/NetSSL_Win/src/RejectCertificateHandler.cpp
@@ -0,0 +1,40 @@
+//
+// RejectCertificateHandler.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/RejectCertificateHandler.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: RejectCertificateHandler
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/RejectCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+RejectCertificateHandler::RejectCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+RejectCertificateHandler::~RejectCertificateHandler()
+{
+}
+
+
+void RejectCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ errorCert.setIgnoreError(false);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SSLException.cpp b/NetSSL_Win/src/SSLException.cpp
new file mode 100644
index 000000000..4fb128caa
--- /dev/null
+++ b/NetSSL_Win/src/SSLException.cpp
@@ -0,0 +1,32 @@
+//
+// SSLException.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SSLException.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: SSLException
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SSLException.h"
+#include
+
+
+namespace Poco {
+namespace Net {
+
+
+POCO_IMPLEMENT_EXCEPTION(SSLException, NetException, "SSL Exception")
+POCO_IMPLEMENT_EXCEPTION(SSLContextException, SSLException, "SSL context exception")
+POCO_IMPLEMENT_EXCEPTION(InvalidCertificateException, SSLException, "Invalid certficate")
+POCO_IMPLEMENT_EXCEPTION(CertificateValidationException, SSLException, "Certificate validation error")
+POCO_IMPLEMENT_EXCEPTION(SSLConnectionUnexpectedlyClosedException, SSLException, "SSL connection unexpectedly closed")
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SSLManager.cpp b/NetSSL_Win/src/SSLManager.cpp
new file mode 100644
index 000000000..a85561905
--- /dev/null
+++ b/NetSSL_Win/src/SSLManager.cpp
@@ -0,0 +1,256 @@
+//
+// SSLManager.cpp
+//
+// $Id: //poco/1.4/NetSSL_Schannel/src/SSLManager.cpp#1 $
+//
+// Library: NetSSL_Schannel
+// Package: SSLCore
+// Module: SSLManager
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/SingletonHolder.h"
+#include "Poco/Delegate.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/OptionException.h"
+#include "Poco/Util/LayeredConfiguration.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string SSLManager::CFG_CERT_NAME("certificateName");
+const std::string SSLManager::VAL_CERT_NAME("");
+const std::string SSLManager::CFG_CERT_STORE("certificateStore");
+const std::string SSLManager::VAL_CERT_STORE("MY");
+const std::string SSLManager::CFG_VER_MODE("verificationMode");
+const Context::VerificationMode SSLManager::VAL_VER_MODE(Context::VERIFY_RELAXED);
+const std::string SSLManager::CFG_REVOCATION_CHECK("revocationChecking");
+const bool SSLManager::VAL_REVOCATION_CHECK(true);
+const std::string SSLManager::CFG_TRUST_ROOTS("trustRoots");
+const bool SSLManager::VAL_TRUST_ROOTS(true);
+const std::string SSLManager::CFG_USE_MACHINE_STORE("useMachineStore");
+const bool SSLManager::VAL_USE_MACHINE_STORE(false);
+const std::string SSLManager::CFG_USE_STRONG_CRYPTO("useStrongCrypto");
+const bool SSLManager::VAL_USE_STRONG_CRYPTO(true);
+const std::string SSLManager::CFG_CERTIFICATE_HANDLER("invalidCertificateHandler.name");
+const std::string SSLManager::VAL_CERTIFICATE_HANDLER("ConsoleCertificateHandler");
+const std::string SSLManager::CFG_SERVER_PREFIX("schannel.server.");
+const std::string SSLManager::CFG_CLIENT_PREFIX("schannel.client.");
+const std::string SSLManager::CFG_REQUIRE_TLSV1("requireTLSv1");
+const std::string SSLManager::CFG_REQUIRE_TLSV1_1("requireTLSv1_1");
+const std::string SSLManager::CFG_REQUIRE_TLSV1_2("requireTLSv1_2");
+
+
+SSLManager::SSLManager()
+{
+}
+
+
+SSLManager::~SSLManager()
+{
+ ClientVerificationError.clear();
+ ServerVerificationError.clear();
+ _ptrServerCertificateHandler = 0;
+ _ptrDefaultServerContext = 0;
+ _ptrClientCertificateHandler = 0;
+ _ptrDefaultClientContext = 0;
+}
+
+
+namespace
+{
+ static Poco::SingletonHolder singleton;
+}
+
+
+SSLManager& SSLManager::instance()
+{
+ return *singleton.get();
+}
+
+
+void SSLManager::initializeServer(InvalidCertificateHandlerPtr& ptrHandler, Context::Ptr ptrContext)
+{
+ _ptrServerCertificateHandler = ptrHandler;
+ _ptrDefaultServerContext = ptrContext;
+}
+
+
+void SSLManager::initializeClient(InvalidCertificateHandlerPtr& ptrHandler, Context::Ptr ptrContext)
+{
+ _ptrClientCertificateHandler = ptrHandler;
+ _ptrDefaultClientContext = ptrContext;
+}
+
+
+Context::Ptr SSLManager::defaultServerContext()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrDefaultServerContext)
+ initDefaultContext(true);
+
+ return _ptrDefaultServerContext;
+}
+
+
+Context::Ptr SSLManager::defaultClientContext()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrDefaultClientContext)
+ initDefaultContext(false);
+
+ return _ptrDefaultClientContext;
+}
+
+
+SSLManager::InvalidCertificateHandlerPtr SSLManager::serverCertificateHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrServerCertificateHandler)
+ initCertificateHandler(true);
+
+ return _ptrServerCertificateHandler;
+}
+
+
+SSLManager::InvalidCertificateHandlerPtr SSLManager::clientCertificateHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrClientCertificateHandler)
+ initCertificateHandler(false);
+
+ return _ptrClientCertificateHandler;
+}
+
+
+void SSLManager::initDefaultContext(bool server)
+{
+ if (server && _ptrDefaultServerContext) return;
+ if (!server && _ptrDefaultClientContext) return;
+
+ initEvents(server);
+
+ const std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
+ Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config();
+ std::string certName = config.getString(prefix + CFG_CERT_NAME, VAL_CERT_NAME);
+ std::string certStore = config.getString(prefix + CFG_CERT_STORE, VAL_CERT_STORE);
+
+ bool requireTLSv1 = config.getBool(prefix + CFG_REQUIRE_TLSV1, false);
+ bool requireTLSv1_1 = config.getBool(prefix + CFG_REQUIRE_TLSV1_1, false);
+ bool requireTLSv1_2 = config.getBool(prefix + CFG_REQUIRE_TLSV1_2, false);
+
+ // optional options for which we have defaults defined
+ Context::VerificationMode verMode = VAL_VER_MODE;
+ if (config.hasProperty(prefix + CFG_VER_MODE))
+ {
+ // either: none, relaxed, strict, once
+ std::string mode = config.getString(prefix + CFG_VER_MODE);
+ verMode = Utility::convertVerificationMode(mode);
+ }
+ bool revocChecking = config.getBool(prefix + CFG_REVOCATION_CHECK, VAL_REVOCATION_CHECK);
+ bool trustRoots = config.getBool(prefix + CFG_TRUST_ROOTS, VAL_TRUST_ROOTS);
+ bool useMachineStore = config.getBool(prefix + CFG_USE_MACHINE_STORE, VAL_USE_MACHINE_STORE);
+ bool useStrongCrypto = config.getBool(prefix + CFG_USE_STRONG_CRYPTO, VAL_USE_STRONG_CRYPTO);
+
+ int options = 0;
+ if (revocChecking) options |= Context::OPT_PERFORM_REVOCATION_CHECK;
+ if (trustRoots) options |= Context::OPT_TRUST_ROOTS_WIN_CERT_STORE;
+ if (useMachineStore) options |= Context::OPT_USE_MACHINE_STORE;
+ if (useStrongCrypto) options |= Context::OPT_USE_STRONG_CRYPTO;
+
+ Context::Usage usage;
+ if (server)
+ {
+ if (requireTLSv1_2)
+ usage = Context::TLSV1_2_SERVER_USE;
+ else if (requireTLSv1_1)
+ usage = Context::TLSV1_1_SERVER_USE;
+ else if (requireTLSv1)
+ usage = Context::TLSV1_SERVER_USE;
+ else
+ usage = Context::SERVER_USE;
+ _ptrDefaultServerContext = new Context(usage, certName, verMode, options, certStore);
+ }
+ else
+ {
+ if (requireTLSv1_2)
+ usage = Context::TLSV1_2_CLIENT_USE;
+ else if (requireTLSv1_1)
+ usage = Context::TLSV1_1_CLIENT_USE;
+ else if (requireTLSv1)
+ usage = Context::TLSV1_CLIENT_USE;
+ else
+ usage = Context::CLIENT_USE;
+ _ptrDefaultClientContext = new Context(usage, certName, verMode, options, certStore);
+ }
+}
+
+
+void SSLManager::initEvents(bool server)
+{
+ initCertificateHandler(server);
+}
+
+
+void SSLManager::initCertificateHandler(bool server)
+{
+ if (server && _ptrServerCertificateHandler) return;
+ if (!server && _ptrClientCertificateHandler) return;
+
+ std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
+ Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config();
+
+ std::string className(config.getString(prefix + CFG_CERTIFICATE_HANDLER, VAL_CERTIFICATE_HANDLER));
+
+ const CertificateHandlerFactory* pFactory = 0;
+ if (certificateHandlerFactoryMgr().hasFactory(className))
+ {
+ pFactory = certificateHandlerFactoryMgr().getFactory(className);
+ }
+
+ if (pFactory)
+ {
+ if (server)
+ _ptrServerCertificateHandler = pFactory->create(true);
+ else
+ _ptrClientCertificateHandler = pFactory->create(false);
+ }
+ else throw Poco::Util::UnknownOptionException("No InvalidCertificate handler known with the name", className);
+}
+
+
+void SSLManager::shutdown()
+{
+ ClientVerificationError.clear();
+ ServerVerificationError.clear();
+ _ptrDefaultServerContext = 0;
+ _ptrDefaultClientContext = 0;
+}
+
+
+void initializeSSL()
+{
+}
+
+
+void uninitializeSSL()
+{
+ SSLManager::instance().shutdown();
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureSMTPClientSession.cpp b/NetSSL_Win/src/SecureSMTPClientSession.cpp
new file mode 100644
index 000000000..b08ed825b
--- /dev/null
+++ b/NetSSL_Win/src/SecureSMTPClientSession.cpp
@@ -0,0 +1,66 @@
+//
+// SecureSMTPClientSession.h
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SecureSMTPClientSession.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: Mail
+// Module: SecureSMTPClientSession
+//
+// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureSMTPClientSession.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/DialogSocket.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureSMTPClientSession::SecureSMTPClientSession(const StreamSocket& socket):
+ SMTPClientSession(socket)
+{
+}
+
+
+SecureSMTPClientSession::SecureSMTPClientSession(const std::string& host, Poco::UInt16 port):
+ SMTPClientSession(host, port),
+ _host(host)
+{
+}
+
+
+SecureSMTPClientSession::~SecureSMTPClientSession()
+{
+}
+
+
+bool SecureSMTPClientSession::startTLS()
+{
+ return startTLS(SSLManager::instance().defaultClientContext());
+}
+
+
+bool SecureSMTPClientSession::startTLS(Context::Ptr pContext)
+{
+ int status = 0;
+ std::string response;
+
+ status = sendCommand("STARTTLS", response);
+ if (!isPositiveCompletion(status)) return false;
+
+ SecureStreamSocket sss(SecureStreamSocket::attach(socket(), _host, pContext));
+ socket() = sss;
+
+ return true;
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureServerSocket.cpp b/NetSSL_Win/src/SecureServerSocket.cpp
new file mode 100644
index 000000000..019eb3078
--- /dev/null
+++ b/NetSSL_Win/src/SecureServerSocket.cpp
@@ -0,0 +1,123 @@
+//
+// SecureServerSocket.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SecureServerSocket.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLSockets
+// Module: SecureServerSocket
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureServerSocket.h"
+#include "Poco/Net/SecureServerSocketImpl.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Exception.h"
+
+
+using Poco::InvalidArgumentException;
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureServerSocket::SecureServerSocket():
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+}
+
+
+SecureServerSocket::SecureServerSocket(Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+}
+
+
+SecureServerSocket::SecureServerSocket(const Socket& socket):
+ ServerSocket(socket)
+{
+ if (!dynamic_cast(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog):
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog):
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+ IPAddress wildcardAddr;
+ SocketAddress address(wildcardAddr, port);
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+ IPAddress wildcardAddr;
+ SocketAddress address(wildcardAddr, port);
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::~SecureServerSocket()
+{
+}
+
+
+SecureServerSocket& SecureServerSocket::operator = (const Socket& socket)
+{
+ if (&socket != this)
+ {
+ if (dynamic_cast(socket.impl()))
+ ServerSocket::operator = (socket);
+ else
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+ }
+ return *this;
+}
+
+
+StreamSocket SecureServerSocket::acceptConnection(SocketAddress& clientAddr)
+{
+ return SecureStreamSocket(impl()->acceptConnection(clientAddr));
+}
+
+
+StreamSocket SecureServerSocket::acceptConnection()
+{
+ SocketAddress clientAddr;
+ return SecureStreamSocket(impl()->acceptConnection(clientAddr));
+}
+
+
+Context::Ptr SecureServerSocket::context() const
+{
+ return static_cast(impl())->context();
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureServerSocketImpl.cpp b/NetSSL_Win/src/SecureServerSocketImpl.cpp
new file mode 100644
index 000000000..df97e3a40
--- /dev/null
+++ b/NetSSL_Win/src/SecureServerSocketImpl.cpp
@@ -0,0 +1,117 @@
+//
+// SecureServerSocketImpl.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SecureServerSocketImpl.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLSockets
+// Module: SecureServerSocketImpl
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureServerSocketImpl.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureServerSocketImpl::SecureServerSocketImpl(Context::Ptr pContext):
+ _impl(new ServerSocketImpl, pContext)
+{
+}
+
+
+SecureServerSocketImpl::~SecureServerSocketImpl()
+{
+ reset();
+}
+
+
+SocketImpl* SecureServerSocketImpl::acceptConnection(SocketAddress& clientAddr)
+{
+ return _impl.acceptConnection(clientAddr);
+}
+
+
+void SecureServerSocketImpl::connect(const SocketAddress& address)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::connectNB(const SocketAddress& address)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::bind(const SocketAddress& address, bool reuseAddress)
+{
+ _impl.bind(address, reuseAddress);
+ reset(_impl.sockfd());
+}
+
+
+void SecureServerSocketImpl::listen(int backlog)
+{
+ _impl.listen(backlog);
+ reset(_impl.sockfd());
+}
+
+
+void SecureServerSocketImpl::close()
+{
+ reset();
+ _impl.close();
+}
+
+
+int SecureServerSocketImpl::sendBytes(const void* buffer, int length, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot sendBytes() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::receiveBytes(void* buffer, int length, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot receiveBytes() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot sendTo() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::sendUrgent(unsigned char data)
+{
+ throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureServerSocket");
+}
+
+
+bool SecureServerSocketImpl::secure() const
+{
+ return true;
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureSocketImpl.cpp b/NetSSL_Win/src/SecureSocketImpl.cpp
new file mode 100644
index 000000000..b9a68f250
--- /dev/null
+++ b/NetSSL_Win/src/SecureSocketImpl.cpp
@@ -0,0 +1,1851 @@
+//
+// SecureSocketImpl.cpp
+//
+// $Id: //poco/1.4/NetSSL_Schannel/src/SecureSocketImpl.cpp#1 $
+//
+// Library: NetSSL_Schannel
+// Package: SSLSockets
+// Module: SecureSocketImpl
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureSocketImpl.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/StreamSocket.h"
+#include "Poco/Net/StreamSocketImpl.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/Net/DNS.h"
+#include "Poco/NumberFormatter.h"
+#include "Poco/NumberParser.h"
+#include "Poco/String.h"
+#include "Poco/Format.h"
+#include "Poco/UnicodeConverter.h"
+#include
+
+
+using Poco::IOException;
+using Poco::TimeoutException;
+using Poco::InvalidArgumentException;
+using Poco::NumberFormatter;
+using Poco::Timespan;
+
+
+namespace Poco {
+namespace Net {
+
+
+class StateMachine
+{
+public:
+ typedef bool (StateMachine::*ConditionMethod)(SOCKET sockfd);
+ typedef void (SecureSocketImpl::*StateImpl)(void);
+
+ StateMachine();
+ ~StateMachine();
+
+ static StateMachine& instance();
+
+ // Conditions
+ bool readable(SOCKET sockfd);
+ bool writable(SOCKET sockfd);
+ bool readOrWritable(SOCKET sockfd);
+ bool none(SOCKET sockfd);
+ void select(fd_set* fdRead, fd_set* fdWrite, SOCKET sockfd);
+
+ void execute(SecureSocketImpl* pSock);
+
+private:
+ StateMachine(const StateMachine&);
+ StateMachine& operator=(const StateMachine&);
+
+ typedef std::pair ConditionState;
+ std::vector _states;
+};
+
+
+SecureSocketImpl::SecureSocketImpl(Poco::AutoPtr pSocketImpl, Context::Ptr pContext):
+ _pSocket(pSocketImpl),
+ _pContext(pContext),
+ _mode(pContext->isForServerUse() ? MODE_SERVER : MODE_CLIENT),
+ _useMachineStore((pContext->options() & Context::OPT_USE_MACHINE_STORE) != 0),
+ _clientAuthRequired(pContext->verificationMode() >= Context::VERIFY_STRICT),
+ _hCertificateStore(0),
+ _pServerCertificate(0),
+ _pPeerCertificate(0),
+ _hCreds(),
+ _hContext(),
+ _clientFlags(0),
+ _serverFlags(0),
+ _hSecurityModule(0),
+ _securityFunctions(),
+ _pReceiveBuffer(0),
+ _receiveBufferSize(0),
+ _pIOBuffer(0),
+ _pSendBuffer(),
+ _ioBufferOffset(0),
+ _ioBufferSize(0),
+ _streamSizes(),
+ _outSecBuffer(&_securityFunctions, true),
+ _inSecBuffer(&_securityFunctions, false),
+ _ioCharBuffer(IO_BUFFER_SIZE),
+ _extraSecBuffer(),
+ _doReadFirst(true),
+ _bytesRead(0),
+ _bytesReadSum(0),
+ _securityStatus(SEC_E_INCOMPLETE_MESSAGE),
+ _state(ST_INITIAL)
+{
+ _hCreds.dwLower = 0;
+ _hCreds.dwUpper = 0;
+
+ _hContext.dwLower = 0;
+ _hContext.dwUpper = 0;
+ _streamSizes.cbBlockSize = _streamSizes.cbHeader = _streamSizes.cbMaximumMessage = _streamSizes.cbTrailer = 0;
+
+ initCommon();
+}
+
+
+SecureSocketImpl::~SecureSocketImpl()
+{
+ cleanup();
+}
+
+
+void SecureSocketImpl::initCommon()
+{
+ loadSecurityLibrary();
+
+ DWORD commonFlags = ISC_REQ_SEQUENCE_DETECT
+ | ISC_REQ_REPLAY_DETECT
+ | ISC_REQ_CONFIDENTIALITY
+ | ISC_RET_EXTENDED_ERROR
+ | ISC_REQ_ALLOCATE_MEMORY
+ | ISC_REQ_STREAM;
+
+ if (_pContext->verificationMode() == Context::VERIFY_NONE)
+ {
+ commonFlags |= ISC_REQ_MANUAL_CRED_VALIDATION;
+ }
+ else if (_pContext->verificationMode() == Context::VERIFY_RELAXED)
+ {
+ commonFlags |= ISC_REQ_INTEGRITY;
+ }
+ else if (_pContext->verificationMode() == Context::VERIFY_STRICT)
+ {
+ commonFlags |= ISC_REQ_INTEGRITY;
+ }
+
+ _serverFlags = commonFlags;
+ _clientFlags = commonFlags;
+
+ if (_pContext->verificationMode() == Context::VERIFY_RELAXED)
+ _clientFlags |= ISC_REQ_MANUAL_CRED_VALIDATION;
+}
+
+
+void SecureSocketImpl::cleanup()
+{
+ _hostName.clear();
+
+ if (_hCreds.dwLower != 0 && _hCreds.dwUpper != 0)
+ {
+ _securityFunctions.FreeCredentialsHandle(&_hCreds);
+ _hCreds.dwLower = 0;
+ _hCreds.dwUpper = 0;
+ }
+
+ if (_hContext.dwLower != 0 && _hContext.dwUpper != 0)
+ {
+ _securityFunctions.DeleteSecurityContext(&_hContext);
+ _hContext.dwLower = 0;
+ _hContext.dwUpper = 0;
+ }
+
+ if (_pServerCertificate)
+ {
+ CertFreeCertificateContext(_pServerCertificate);
+ _pServerCertificate = 0;
+ }
+
+ if (_pPeerCertificate)
+ {
+ CertFreeCertificateContext(_pPeerCertificate);
+ _pPeerCertificate = 0;
+ }
+
+ if (_hCertificateStore)
+ {
+ CertCloseStore(_hCertificateStore, 0);
+ _hCertificateStore = 0;
+ }
+
+ if (_hSecurityModule)
+ {
+ FreeLibrary(_hSecurityModule);
+ _hSecurityModule = 0;
+ }
+
+ delete [] _pReceiveBuffer;
+ _pReceiveBuffer = 0;
+
+ delete [] _pIOBuffer;
+ _pIOBuffer = 0;
+}
+
+
+SocketImpl* SecureSocketImpl::acceptConnection(SocketAddress& clientAddr)
+{
+ StreamSocket ss = _pSocket->acceptConnection(clientAddr);
+ Poco::AutoPtr pSecureStreamSocketImpl = new SecureStreamSocketImpl(static_cast(ss.impl()), _pContext);
+ pSecureStreamSocketImpl->acceptSSL();
+ pSecureStreamSocketImpl->duplicate();
+ return pSecureStreamSocketImpl;
+}
+
+
+void SecureSocketImpl::connect(const SocketAddress& address, bool performHandshake)
+{
+ _state = ST_ERROR;
+ _pSocket->connect(address);
+ connectSSL(performHandshake);
+ _state = ST_DONE;
+}
+
+
+void SecureSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake)
+{
+ _state = ST_ERROR;
+ _pSocket->connect(address, timeout);
+ connectSSL(performHandshake);
+ _state = ST_DONE;
+}
+
+
+void SecureSocketImpl::connectNB(const SocketAddress& address)
+{
+ try
+ {
+ _state = ST_CONNECTING;
+ _pSocket->connectNB(address);
+ }
+ catch (...)
+ {
+ _state = ST_ERROR;
+ }
+}
+
+
+void SecureSocketImpl::bind(const SocketAddress& address, bool reuseAddress)
+{
+ _pSocket->bind(address, reuseAddress);
+}
+
+
+void SecureSocketImpl::listen(int backlog)
+{
+ _mode = MODE_SERVER;
+
+ if ((_hCreds.dwLower == 0) && (_hCreds.dwUpper == 0))
+ {
+ initServerContext();
+ }
+ _pSocket->listen(backlog);
+}
+
+
+void SecureSocketImpl::shutdown()
+{
+ // TODO
+ if (_mode == MODE_SERVER)
+ serverDisconnect(&_hCreds, &_hContext);
+ else
+ clientDisconnect(&_hCreds, &_hContext);
+
+ _pSocket->shutdown();
+}
+
+
+void SecureSocketImpl::close()
+{
+ if (_mode == MODE_SERVER)
+ serverDisconnect(&_hCreds, &_hContext);
+ else
+ clientDisconnect(&_hCreds, &_hContext);
+
+ _pSocket->close();
+ cleanup();
+}
+
+
+void SecureSocketImpl::abort()
+{
+ // TODO
+ _pSocket->shutdown();
+}
+
+
+void SecureSocketImpl::acceptSSL()
+{
+ _state = ST_DONE;
+ initServerContext();
+ serverConnect();
+}
+
+
+int SecureSocketImpl::sendBytes(const void* buffer, int length, int flags)
+{
+ if (_state == ST_ERROR)
+ return 0;
+
+ if (_state != ST_DONE)
+ {
+ bool establish = _pSocket->getBlocking();
+ if (establish)
+ {
+ while (_state != ST_DONE)
+ stateMachine();
+ }
+ else
+ {
+ stateMachine();
+ return -1;
+ }
+ }
+
+ int rc = 0;
+ int dataToSend = length;
+ int dataSent = 0;
+ const char* pBuffer = reinterpret_cast(buffer);
+ if (!_pSendBuffer || (_pSendBuffer->size() != _ioBufferSize))
+ _pSendBuffer = new Poco::Buffer(_ioBufferSize);
+
+ while (dataToSend > 0)
+ {
+ AutoSecBufferDesc<4> msg(&_securityFunctions, false);
+ int dataSize = dataToSend;
+ if (dataSize > _streamSizes.cbMaximumMessage)
+ dataSize = _streamSizes.cbMaximumMessage;
+ SecBuffer* pDataBuffer = 0;
+ SecBuffer* pExtraBuffer = 0;
+
+ CopyMemory(_pSendBuffer->begin() + _streamSizes.cbHeader, pBuffer + dataSent, dataSize);
+
+ msg.setSecBufferStreamHeader(0, _pSendBuffer->begin(), _streamSizes.cbHeader);
+ msg.setSecBufferData(1, _pSendBuffer->begin() + _streamSizes.cbHeader, dataSize);
+ msg.setSecBufferStreamTrailer(2, _pSendBuffer->begin() + _streamSizes.cbHeader + dataSize, _streamSizes.cbTrailer);
+ msg.setSecBufferEmpty(3);
+
+ SECURITY_STATUS securityStatus = _securityFunctions.EncryptMessage(&_hContext, 0, &msg, 0);
+
+ if (FAILED(securityStatus) && securityStatus != SEC_E_CONTEXT_EXPIRED)
+ throw SSLException("Failed to encrypt message", Utility::formatError(securityStatus));
+
+ int outBufferLen = msg[0].cbBuffer+msg[1].cbBuffer + msg[2].cbBuffer;
+
+ int rcTmp = _pSocket->sendBytes(_pSendBuffer->begin(), outBufferLen, flags);
+ if (_pSocket->getBlocking() && rcTmp == -1)
+ {
+ if (dataSent == 0)
+ return -1;
+ return dataSent;
+ }
+ if (rcTmp != outBufferLen)
+ throw SSLException("Failed to send encrypted message");
+
+ dataToSend -= dataSize;
+ dataSent += dataSize;
+ rc += rcTmp;
+ }
+ return dataSent;
+}
+
+
+int SecureSocketImpl::sendRawBytes(const void* buffer, int length, int flags)
+{
+ return _pSocket->sendBytes(buffer, length, flags);
+}
+
+
+int SecureSocketImpl::receiveBytes(void* buffer, int length, int flags)
+{
+ if (_state == ST_ERROR)
+ return 0;
+
+ if (_state != ST_DONE)
+ {
+ bool establish = _pSocket->getBlocking();
+ if (establish)
+ {
+ while (_state != ST_DONE)
+ stateMachine();
+ }
+ else
+ {
+ stateMachine();
+ return -1;
+ }
+ }
+
+ int rc(0);
+ if (_receiveBufferSize) // any remaining data from previous calls?
+ {
+ if (static_cast(length) < _receiveBufferSize)
+ {
+ rc = length;
+ CopyMemory(buffer, _pReceiveBuffer, rc);
+ MoveMemory(_pReceiveBuffer, _pReceiveBuffer + rc, _receiveBufferSize-rc);
+ _receiveBufferSize -= rc;
+ }
+ else
+ {
+ rc = _receiveBufferSize;
+ CopyMemory(buffer, _pReceiveBuffer, rc);
+ delete [] _pReceiveBuffer;
+ _pReceiveBuffer = 0;
+ _receiveBufferSize = 0;
+ }
+ }
+ else
+ {
+ poco_assert (!_pReceiveBuffer);
+
+ if (!_pIOBuffer)
+ _pIOBuffer = new BYTE[_ioBufferSize];
+
+ bool cont = true;
+ do
+ {
+ int numBytes = _pSocket->receiveBytes(_pIOBuffer + _ioBufferOffset, _ioBufferSize - _ioBufferOffset);
+
+ if (numBytes == -1)
+ return -1;
+ else if (numBytes == 0)
+ break;
+ else
+ _ioBufferOffset += numBytes;
+
+ int bytesDecoded = 0;
+ _extraSecBuffer = SecBuffer();
+ SECURITY_STATUS securityStatus = decodeBufferFull(_pIOBuffer, _ioBufferOffset, reinterpret_cast(buffer), length, bytesDecoded);
+
+ if (_extraSecBuffer.cbBuffer > 0)
+ {
+ MoveMemory(_pIOBuffer, _extraSecBuffer.pvBuffer, _extraSecBuffer.cbBuffer);
+ _ioBufferOffset = _extraSecBuffer.cbBuffer;
+ }
+ else
+ {
+ _ioBufferOffset = 0;
+ cont = false;
+ }
+
+ _extraSecBuffer.pvBuffer = 0;
+ _extraSecBuffer.cbBuffer = 0;
+
+ if (bytesDecoded > 0)
+ {
+ // bytesDecoded contains everything including overflow data
+ rc = bytesDecoded;
+ if (rc > length)
+ rc = length;
+
+ return rc;
+ }
+
+ if (securityStatus == SEC_E_INCOMPLETE_MESSAGE)
+ {
+ if (!_pSocket->getBlocking())
+ return -1;
+ continue;
+ }
+
+ if (securityStatus == SEC_I_CONTEXT_EXPIRED)
+ {
+ SetLastError(securityStatus);
+ break;
+ }
+
+ if (securityStatus != SEC_E_OK && securityStatus != SEC_I_RENEGOTIATE && securityStatus != SEC_I_CONTEXT_EXPIRED)
+ {
+ SetLastError(securityStatus);
+ break;
+ }
+
+ if (securityStatus == SEC_I_RENEGOTIATE)
+ {
+ _doReadFirst = false;
+ _state = ST_CLIENTHANDSHAKECONDREAD;
+ if (!_pSocket->getBlocking())
+ return -1;
+
+ securityStatus = performClientHandshakeLoop();
+
+ if (securityStatus != SEC_E_OK)
+ break;
+
+ if (_extraSecBuffer.pvBuffer)
+ {
+ MoveMemory(_pIOBuffer, _extraSecBuffer.pvBuffer, _extraSecBuffer.cbBuffer);
+ _ioBufferOffset = _extraSecBuffer.cbBuffer;
+ }
+
+ delete [] _extraSecBuffer.pvBuffer;
+ }
+ }
+ while (cont);
+ }
+
+ return rc;
+}
+
+
+SECURITY_STATUS SecureSocketImpl::decodeMessage(BYTE* pBuffer, DWORD bufSize, AutoSecBufferDesc<4>& msg, SecBuffer*& pDataBuffer, SecBuffer*& pExtraBuffer)
+{
+ msg.setSecBufferData(0, pBuffer, bufSize);
+ msg.setSecBufferEmpty(1);
+ msg.setSecBufferEmpty(2);
+ msg.setSecBufferEmpty(3);
+ pDataBuffer = 0;
+ pExtraBuffer = 0;
+
+ SECURITY_STATUS securityStatus = _securityFunctions.DecryptMessage(&_hContext, &msg, 0, 0);
+
+ if (securityStatus == SEC_E_OK || securityStatus == SEC_I_RENEGOTIATE)
+ {
+ for (int i = 1; i < 4; ++i)
+ {
+ if (pDataBuffer == 0 && msg[i].BufferType == SECBUFFER_DATA)
+ pDataBuffer = &msg[i];
+
+ if (pExtraBuffer == NULL && msg[i].BufferType == SECBUFFER_EXTRA)
+ pExtraBuffer = &msg[i];
+ }
+ }
+
+ return securityStatus;
+}
+
+
+SECURITY_STATUS SecureSocketImpl::decodeBufferFull(BYTE* pBuffer, DWORD bufSize, char* pOutBuffer, int outLength, int& bytesDecoded)
+{
+ poco_check_ptr (pBuffer);
+ poco_assert (bufSize > 0);
+ poco_check_ptr (pOutBuffer);
+ poco_assert (outLength > 0);
+ poco_assert (_pReceiveBuffer == 0);
+
+ _extraSecBuffer.pvBuffer = 0;
+ _extraSecBuffer.cbBuffer = 0;
+
+ SecBuffer* pDataBuffer = 0;
+ SecBuffer* pExtraBuffer = 0;
+ int bytes = 0;
+ bytesDecoded = 0;
+
+#ifdef _DEBUG
+ Poco::Buffer bufCpy(bufSize);
+ memcpy(bufCpy.begin(), pBuffer, bufSize);
+#endif
+
+ Poco::SharedPtr > ptrOverflow;
+ int overflowIdx = 0;
+ SECURITY_STATUS securityStatus = SEC_E_OK;
+ do
+ {
+ AutoSecBufferDesc<4> msg(&_securityFunctions, false);
+ securityStatus = decodeMessage(pBuffer, bufSize, msg, pDataBuffer, pExtraBuffer);
+ if (pDataBuffer && pDataBuffer->cbBuffer > 0)
+ {
+ bytes = pDataBuffer->cbBuffer;
+ bytesDecoded += bytes;
+ // do we have room for more data in pOutBuffer?
+ if (bytes <= outLength) // yes, everything fits in there
+ {
+ outLength -= bytes;
+ memcpy(pOutBuffer, pDataBuffer->pvBuffer, bytes);
+ pOutBuffer += bytes;
+ }
+ else
+ {
+ // not enough room in pOutBuffer, write overflow data
+ // simply reserve bufSize bytes (is large enough even in worst case scenario, no need to re-increase)
+ if (!ptrOverflow)
+ ptrOverflow = new Poco::Buffer(bufSize);
+ if (outLength > 0)
+ {
+ // make pOutBuffer full
+ memcpy(pOutBuffer, pDataBuffer->pvBuffer, outLength);
+ // no longer valid to write to pOutBuffer
+ pOutBuffer = 0;
+ // copy the rest to ptrOverflow
+ memcpy(ptrOverflow->begin(), reinterpret_cast(pDataBuffer->pvBuffer) + outLength, bytes - outLength);
+ overflowIdx = bytes - outLength;
+ outLength = 0;
+ }
+ else
+ {
+ // append to ptrOverflow
+ poco_assert_dbg (overflowIdx + bytes <= ptrOverflow->size());
+ memcpy(ptrOverflow->begin() + overflowIdx, pDataBuffer->pvBuffer, bytes);
+ overflowIdx += bytes;
+ }
+ }
+ }
+ if (pExtraBuffer && pExtraBuffer->cbBuffer > 0)
+ {
+ // we have potentially more data to decode
+ // decode as much as possible
+ pBuffer = reinterpret_cast(pExtraBuffer->pvBuffer);
+ bufSize = pExtraBuffer->cbBuffer;
+
+ poco_assert_dbg (memcmp(pBuffer, bufCpy.end() - bufSize, bufSize) == 0);
+ }
+ else
+ {
+ // everything decoded
+ if (securityStatus != SEC_E_OK && securityStatus != SEC_E_INCOMPLETE_MESSAGE && securityStatus != SEC_I_RENEGOTIATE && securityStatus != SEC_I_CONTEXT_EXPIRED)
+ {
+ throw SSLException("Failed to decode data", Utility::formatError(securityStatus));
+ }
+ else if (securityStatus == SEC_E_OK)
+ {
+ pBuffer = 0;
+ bufSize = 0;
+ }
+ }
+
+ if (securityStatus == SEC_I_RENEGOTIATE)
+ {
+ _doReadFirst = false;
+ securityStatus = performClientHandshakeLoop();
+ if (securityStatus != SEC_E_OK)
+ break;
+ }
+ }
+ while (securityStatus == SEC_E_OK && pBuffer);
+
+ if (overflowIdx > 0)
+ {
+ _pReceiveBuffer = new BYTE[overflowIdx];
+ memcpy(_pReceiveBuffer, ptrOverflow->begin(), overflowIdx);
+ _receiveBufferSize = overflowIdx;
+ }
+ if (bufSize > 0)
+ {
+ _extraSecBuffer.cbBuffer = bufSize;
+ _extraSecBuffer.pvBuffer = pBuffer;
+ }
+
+ if (pBuffer == 0) securityStatus = SEC_E_OK;
+ return securityStatus;
+}
+
+
+int SecureSocketImpl::receiveRawBytes(void* buffer, int length, int flags)
+{
+ return _pSocket->receiveBytes(buffer, length, flags);
+}
+
+
+void SecureSocketImpl::setPeerHostName(const std::string& peerHostName)
+{
+ _peerHostName = peerHostName;
+}
+
+
+PCCERT_CONTEXT SecureSocketImpl::loadCertificate(const std::string& certStore, const std::string& certName, bool useMachineStore, bool mustFindCertificate)
+{
+ PCCERT_CONTEXT pCert = 0;
+
+ std::wstring wcertStore;
+ Poco::UnicodeConverter::convert(certStore, wcertStore);
+ if (!_hCertificateStore)
+ {
+ if (useMachineStore)
+ _hCertificateStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, certStore.c_str());
+ else
+ _hCertificateStore = CertOpenSystemStoreW(0, wcertStore.c_str());
+ }
+ if (!_hCertificateStore)
+ {
+ throw SSLException("Failed to open certificate store", certStore, GetLastError());
+ }
+ if (!certName.empty())
+ {
+ CERT_RDN_ATTR cert_rdn_attr;
+ cert_rdn_attr.pszObjId = szOID_COMMON_NAME;
+ cert_rdn_attr.dwValueType = CERT_RDN_ANY_TYPE;
+ cert_rdn_attr.Value.cbData = (DWORD) certName.size();
+ cert_rdn_attr.Value.pbData = (BYTE *) certName.c_str();
+
+ CERT_RDN cert_rdn;
+ cert_rdn.cRDNAttr = 1;
+ cert_rdn.rgRDNAttr = &cert_rdn_attr;
+
+ pCert = CertFindCertificateInStore(_hCertificateStore, X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_ATTR, &cert_rdn, NULL);
+ if (!pCert)
+ {
+ // we throw independently of mustFind. If a name is specified we consider it an error
+ // if we don't find the given certificate
+ throw SSLException(Poco::format("Failed to find certificate %s in store %s", certName, certStore));
+ }
+ }
+
+ if (mustFindCertificate && !pCert)
+ throw SSLException(Poco::format("Failed to find certificate %s in store %s", certName, certStore));
+
+ return pCert;
+}
+
+
+void SecureSocketImpl::acquireSchannelContext(Mode mode, PCCERT_CONTEXT pCertContext, CredHandle& outHandle)
+{
+ SCHANNEL_CRED schannelCred;
+ ZeroMemory(&schannelCred, sizeof(schannelCred));
+ schannelCred.dwVersion = SCHANNEL_CRED_VERSION;
+
+ if (pCertContext != 0)
+ {
+ schannelCred.cCreds = 1; // how many cred are stored in &pCertContext
+ schannelCred.paCred = &pCertContext;
+ }
+
+ schannelCred.grbitEnabledProtocols = proto();
+
+ // Windows NT and Windows Me/98/95: revocation checking not supported via flags
+ if (_pContext->options() & Context::OPT_PERFORM_REVOCATION_CHECK)
+ schannelCred.dwFlags |= SCH_CRED_REVOCATION_CHECK_CHAIN;
+ else
+ schannelCred.dwFlags |= SCH_CRED_IGNORE_NO_REVOCATION_CHECK | SCH_CRED_IGNORE_REVOCATION_OFFLINE;
+
+ if (mode == MODE_SERVER)
+ {
+ if (_pContext->verificationMode() == Context::VERIFY_STRICT)
+ schannelCred.dwFlags |= SCH_CRED_NO_SYSTEM_MAPPER;
+
+ if (_pContext->verificationMode() == Context::VERIFY_NONE)
+ schannelCred.dwFlags |= SCH_CRED_MANUAL_CRED_VALIDATION;
+ }
+ else
+ {
+ if (_pContext->verificationMode() == Context::VERIFY_STRICT)
+ schannelCred.dwFlags |= SCH_CRED_NO_DEFAULT_CREDS;
+ else
+ schannelCred.dwFlags |= SCH_CRED_USE_DEFAULT_CREDS;
+
+ if (_pContext->verificationMode() == Context::VERIFY_NONE)
+ schannelCred.dwFlags |= SCH_CRED_MANUAL_CRED_VALIDATION | SCH_CRED_NO_SERVERNAME_CHECK;
+ }
+
+#if defined(SCH_USE_STRONG_CRYPTO)
+ if (_pContext->options() & Context::OPT_USE_STRONG_CRYPTO)
+ schannelCred.dwFlags |= SCH_USE_STRONG_CRYPTO;
+#endif
+
+ schannelCred.hRootStore = _pContext->certificateStore();
+
+ TimeStamp tsExpiry;
+ tsExpiry.LowPart = tsExpiry.HighPart = 0;
+ SECURITY_STATUS status = _securityFunctions.AcquireCredentialsHandleW(
+ NULL,
+ UNISP_NAME_W,
+ mode == MODE_SERVER ? SECPKG_CRED_INBOUND : SECPKG_CRED_OUTBOUND,
+ NULL,
+ &schannelCred,
+ NULL,
+ NULL,
+ &outHandle,
+ &tsExpiry);
+
+ if (status != SEC_E_OK)
+ {
+ cleanup();
+ throw SSLException("Failed to acquire Schannel credentials", Utility::formatError(status));
+ }
+}
+
+
+bool SecureSocketImpl::loadSecurityLibrary()
+{
+ if (_hSecurityModule) return true;
+
+ OSVERSIONINFO VerInfo;
+ std::wstring dllPath;
+
+ // Find out which security DLL to use, depending on
+ // whether we are on Win2k, NT or Win9x
+
+ VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ if (!GetVersionEx(&VerInfo))
+ {
+ return false;
+ }
+
+#if defined(_WIN32_WCE)
+ dllPath = L"Secur32.dll";
+#else
+ if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT
+ && VerInfo.dwMajorVersion == 4)
+ {
+ dllPath = L"Security.dll";
+ }
+ else if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ||
+ VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT )
+ {
+ dllPath = L"Secur32.dll";
+ }
+ else
+ {
+ return false;
+ }
+#endif
+
+ //
+ // Load Security DLL
+ //
+
+ _hSecurityModule = LoadLibraryW(dllPath.c_str());
+ if(_hSecurityModule == 0)
+ {
+ return false;
+ }
+
+#if defined(_WIN32_WCE)
+ INIT_SECURITY_INTERFACE pInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddressW( _hSecurityModule, L"InitSecurityInterfaceW");
+#else
+ INIT_SECURITY_INTERFACE pInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddress( _hSecurityModule, "InitSecurityInterfaceW");
+#endif
+
+ if (!pInitSecurityInterface)
+ {
+ FreeLibrary(_hSecurityModule);
+ _hSecurityModule = 0;
+ return false;
+ }
+
+ PSecurityFunctionTable pSecurityFunc = pInitSecurityInterface();
+ if (!pSecurityFunc)
+ {
+ FreeLibrary(_hSecurityModule);
+ _hSecurityModule = 0;
+ return false;
+ }
+
+ CopyMemory(&_securityFunctions, pSecurityFunc, sizeof(_securityFunctions));
+
+ return true;
+}
+
+
+void SecureSocketImpl::connectSSL(bool completeHandshake)
+{
+ poco_assert_dbg(_pPeerCertificate == 0);
+ poco_assert_dbg(_hostName.empty());
+
+ _hostName = _pSocket->address().host().toString();
+
+ initClientContext();
+ performClientHandshake();
+ clientConnectVerify();
+}
+
+
+void SecureSocketImpl::clientConnectVerify()
+{
+ poco_assert_dbg(!_pPeerCertificate);
+ poco_assert_dbg(!_hostName.empty());
+
+ try
+ {
+ SECURITY_STATUS securityStatus = _securityFunctions.QueryContextAttributesW(&_hContext, SECPKG_ATTR_REMOTE_CERT_CONTEXT, (PVOID) &_pPeerCertificate);
+ if (securityStatus != SEC_E_OK)
+ throw SSLException("Failed to obtain peer certificate", Utility::formatError(securityStatus));
+
+ clientVerifyCertificate(_pPeerCertificate, _hostName, 0);
+
+ securityStatus = _securityFunctions.QueryContextAttributesW(&_hContext, SECPKG_ATTR_STREAM_SIZES, &_streamSizes);
+ if (securityStatus != SEC_E_OK)
+ throw SSLException("Failed to query stream sizes", Utility::formatError(securityStatus));
+
+ _ioBufferSize = _streamSizes.cbHeader + _streamSizes.cbMaximumMessage + _streamSizes.cbTrailer;
+ _state = ST_DONE;
+ }
+ catch (...)
+ {
+ if (_pPeerCertificate)
+ {
+ CertFreeCertificateContext(_pPeerCertificate);
+ _pPeerCertificate = 0;
+ }
+ throw;
+ }
+}
+
+
+void SecureSocketImpl::initClientContext()
+{
+ _pServerCertificate = loadCertificate(_pContext->certificateStoreName(), _pContext->certificateName(), _useMachineStore, false);
+ acquireSchannelContext(MODE_CLIENT, _pServerCertificate, _hCreds);
+}
+
+
+void SecureSocketImpl::performClientHandshake()
+{
+ performInitialClientHandshake();
+ performClientHandshakeLoop();
+}
+
+
+void SecureSocketImpl::performInitialClientHandshake()
+{
+ // get initial security token
+ _outSecBuffer = AutoSecBufferDesc<1>(&_securityFunctions, true);
+ _outSecBuffer.setSecBufferToken(0, 0, 0);
+
+ TimeStamp ts;
+ DWORD contextAttributes(0);
+ std::wstring whostName;
+ Poco::UnicodeConverter::convert(_hostName, whostName);
+ _securityStatus = _securityFunctions.InitializeSecurityContextW(
+ &_hCreds,
+ 0,
+ const_cast(whostName.c_str()),
+ _clientFlags,
+ 0,
+ SECURITY_NATIVE_DREP,
+ 0,
+ 0,
+ &_hContext, // init hContext
+ &_outSecBuffer,
+ &contextAttributes,
+ &ts);
+
+ if (_securityStatus != SEC_E_OK)
+ {
+ if (_securityStatus == SEC_I_INCOMPLETE_CREDENTIALS)
+ {
+ // the server is asking for client credentials, we didn't send one because we were not configured to do so, abort
+ throw SSLException("Handshake failed: No client credentials configured");
+ }
+ else if (_securityStatus != SEC_I_CONTINUE_NEEDED)
+ {
+ throw SSLException("Handshake failed", Utility::formatError(_securityStatus));
+ }
+ }
+
+ // incomplete credentials: more calls to InitializeSecurityContext needed
+ // send the token
+ sendInitialTokenOutBuffer();
+
+ if (_securityStatus == SEC_E_OK)
+ {
+ // The security context was successfully initialized.
+ // There is no need for another InitializeSecurityContext (Schannel) call.
+ _state = ST_DONE;
+ return;
+ }
+
+ //SEC_I_CONTINUE_NEEDED was returned:
+ // Wait for a return token. The returned token is then passed in
+ // another call to InitializeSecurityContext (Schannel). The output token can be empty.
+
+ _extraSecBuffer = SecBuffer();
+ _doReadFirst = true;
+ _state = ST_CLIENTHANDSHAKECONDREAD;
+ _securityStatus = SEC_E_INCOMPLETE_MESSAGE;
+}
+
+
+void SecureSocketImpl::sendInitialTokenOutBuffer()
+{
+ // send the token
+ if (_outSecBuffer[0].cbBuffer != 0 && _outSecBuffer[0].pvBuffer != 0)
+ {
+ int numBytes = sendRawBytes(_outSecBuffer[0].pvBuffer, _outSecBuffer[0].cbBuffer);
+
+ if (numBytes != _outSecBuffer[0].cbBuffer)
+ throw SSLException("Failed to send token to the server");
+ }
+}
+
+
+SECURITY_STATUS SecureSocketImpl::performClientHandshakeLoop()
+{
+ _bytesRead = 0;
+ _bytesReadSum = 0;
+ _securityStatus = SEC_E_INCOMPLETE_MESSAGE;
+
+ while (_securityStatus == SEC_I_CONTINUE_NEEDED || _securityStatus == SEC_E_INCOMPLETE_MESSAGE || _securityStatus == SEC_I_INCOMPLETE_CREDENTIALS)
+ {
+ performClientHandshakeLoopCondRead();
+
+ if (_securityStatus == SEC_E_OK)
+ performClientHandshakeLoopOK();
+ else if (_securityStatus == SEC_I_CONTINUE_NEEDED)
+ performClientHandshakeLoopContinueNeeded();
+ else if (FAILED(_securityStatus))
+ {
+ if (_outFlags & ISC_RET_EXTENDED_ERROR)
+ performClientHandshakeLoopExtError();
+ else
+ performClientHandshakeLoopError();
+ }
+ else
+ performClientHandshakeLoopIncompleteMessage();
+ }
+
+ if (FAILED(_securityStatus))
+ {
+ performClientHandshakeLoopError();
+ }
+
+ return _securityStatus;
+}
+
+
+
+void SecureSocketImpl::performClientHandshakeLoopExtError()
+{
+ poco_assert_dbg (FAILED(_securityStatus));
+
+ performClientHandshakeSendOutBuffer();
+ performClientHandshakeLoopError();
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopError()
+{
+ poco_assert_dbg (FAILED(_securityStatus));
+ cleanup();
+ _state = ST_ERROR;
+ throw SSLException("Error during handshake", Utility::formatError(_securityStatus));
+}
+
+void SecureSocketImpl::performClientHandshakeSendOutBuffer()
+{
+ if (_outSecBuffer[0].cbBuffer != 0 && _outSecBuffer[0].pvBuffer != NULL)
+ {
+ int numBytes = sendRawBytes(static_cast(_outSecBuffer[0].pvBuffer), _outSecBuffer[0].cbBuffer);
+
+ if (numBytes != _outSecBuffer[0].cbBuffer)
+ {
+ cleanup();
+ throw SSLException("Socket error during handshake");
+ }
+ _bytesReadSum = 0;
+ _outSecBuffer.release(0);
+ }
+}
+
+
+void SecureSocketImpl::performClientHandshakeExtraBuffer()
+{
+ if (_inSecBuffer[1].BufferType == SECBUFFER_EXTRA)
+ {
+ _extraSecBuffer.pvBuffer = new BYTE[_inSecBuffer[1].cbBuffer];
+
+ MoveMemory(_extraSecBuffer.pvBuffer, _ioCharBuffer.begin() + (_bytesReadSum - _inSecBuffer[1].cbBuffer), _inSecBuffer[1].cbBuffer);
+
+ _extraSecBuffer.cbBuffer = _inSecBuffer[1].cbBuffer;
+ _extraSecBuffer.BufferType = SECBUFFER_TOKEN;
+ }
+ else
+ {
+ _extraSecBuffer.pvBuffer = 0;
+ _extraSecBuffer.cbBuffer = 0;
+ _extraSecBuffer.BufferType = SECBUFFER_EMPTY;
+ }
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopOK()
+{
+ poco_assert_dbg(_securityStatus == SEC_E_OK);
+
+ performClientHandshakeSendOutBuffer();
+ performClientHandshakeExtraBuffer();
+ _state = ST_VERIFY;
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopInit()
+{
+ _inSecBuffer = AutoSecBufferDesc<2> (&_securityFunctions, false);
+ _outSecBuffer = AutoSecBufferDesc<1>(&_securityFunctions, true);
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopRead()
+{
+ poco_assert_dbg (_doReadFirst);
+
+ poco_assert (IO_BUFFER_SIZE > _bytesReadSum);
+ _bytesRead = receiveRawBytes((void *)(_ioCharBuffer.begin() + _bytesReadSum), IO_BUFFER_SIZE - _bytesReadSum);
+ if (_bytesRead <= 0)
+ throw SSLException("Error during handshake: failed to read data");
+
+ _bytesReadSum += _bytesRead;
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopCondRead()
+{
+ poco_assert_dbg (_securityStatus == SEC_E_INCOMPLETE_MESSAGE || SEC_I_CONTINUE_NEEDED);
+
+ performClientHandshakeLoopInit();
+ if (_doReadFirst)
+ {
+ performClientHandshakeLoopRead();
+ }
+ else _doReadFirst = true;
+
+ _inSecBuffer.setSecBufferToken(0, _ioCharBuffer.begin(), _bytesReadSum);
+ // inbuffer 1 should be empty
+ _inSecBuffer.setSecBufferEmpty(1);
+
+ // outBuffer[0] should be empty
+ _outSecBuffer.setSecBufferToken(0, 0, 0);
+
+ _outFlags = 0;
+ TimeStamp ts;
+ _securityStatus = _securityFunctions.InitializeSecurityContextW(
+ &_hCreds,
+ &_hContext,
+ 0,
+ _clientFlags,
+ 0,
+ SECURITY_NATIVE_DREP,
+ &_inSecBuffer,
+ 0,
+ 0,
+ &_outSecBuffer,
+ &_outFlags,
+ &ts);
+
+ if (_securityStatus == SEC_E_OK)
+ {
+ _state = ST_CLIENTHANDSHAKEOK;
+ }
+ else if (_securityStatus == SEC_I_CONTINUE_NEEDED)
+ {
+ _state = ST_CLIENTHANDSHAKECONTINUE;
+ }
+ else if (FAILED(_securityStatus))
+ {
+ if (_outFlags & ISC_RET_EXTENDED_ERROR)
+ _state = ST_CLIENTHANDSHAKEEXTERROR;
+ else
+ _state = ST_ERROR;
+ }
+ else
+ {
+ _state = ST_CLIENTHANDSHAKEINCOMPLETE;
+ }
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopContinueNeeded()
+{
+ performClientHandshakeSendOutBuffer();
+
+ if (_inSecBuffer[1].BufferType == SECBUFFER_EXTRA)
+ {
+ MoveMemory(_ioCharBuffer.begin(),
+ _ioCharBuffer.begin() + (_bytesReadSum - _inSecBuffer[1].cbBuffer),
+ _inSecBuffer[1].cbBuffer);
+
+ _bytesReadSum = _inSecBuffer[1].cbBuffer;
+ }
+ else _bytesReadSum = 0;
+
+ _state = ST_CLIENTHANDSHAKECONDREAD;
+}
+
+
+void SecureSocketImpl::performClientHandshakeLoopIncompleteMessage()
+{
+ _doReadFirst = true;
+ _state = ST_CLIENTHANDSHAKECONDREAD;
+}
+
+
+void SecureSocketImpl::initServerContext()
+{
+ _pServerCertificate = loadCertificate(_pContext->certificateStoreName(), _pContext->certificateName(), _useMachineStore, true);
+ acquireSchannelContext(MODE_SERVER, _pServerCertificate, _hCreds);
+}
+
+
+void SecureSocketImpl::serverConnect()
+{
+ serverHandshakeLoop(&_hContext, &_hCreds, _clientAuthRequired, TRUE, TRUE);
+
+ SECURITY_STATUS securityStatus;
+ if (_clientAuthRequired)
+ {
+ poco_assert_dbg (!_pPeerCertificate);
+ securityStatus = _securityFunctions.QueryContextAttributesW(&_hContext, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &_pPeerCertificate);
+
+ if (securityStatus != SEC_E_OK)
+ {
+ if (_pPeerCertificate)
+ {
+ CertFreeCertificateContext(_pPeerCertificate);
+ _pPeerCertificate = 0;
+ }
+ throw SSLException("Cannot obtain client certificate", Utility::formatError(securityStatus));
+ }
+ else
+ {
+ serverVerifyCertificate(_pPeerCertificate, 0);
+ }
+ }
+
+ securityStatus = _securityFunctions.QueryContextAttributesW(&_hContext,SECPKG_ATTR_STREAM_SIZES, &_streamSizes);
+ if (securityStatus != SEC_E_OK)
+ {
+ throw SSLException("Cannot query stream sizes", Utility::formatError(securityStatus));
+ }
+
+ _ioBufferSize = _streamSizes.cbHeader + _streamSizes.cbMaximumMessage + _streamSizes.cbTrailer;
+}
+
+
+bool SecureSocketImpl::serverHandshakeLoop(PCtxtHandle phContext, PCredHandle phCred, BOOL requireClientAuth, BOOL fDoInitialRead, BOOL NewContext)
+{
+ TimeStamp tsExpiry;
+ DWORD err(0);
+ BOOL doRead = fDoInitialRead;
+ BOOL initContext = NewContext;
+ DWORD outFlags;
+ BYTE ioBuffer[IO_BUFFER_SIZE];
+ DWORD ioBufferIdx = 0;
+ SECURITY_STATUS securityStatus = SEC_E_INCOMPLETE_MESSAGE;
+
+ while (securityStatus == SEC_I_CONTINUE_NEEDED || securityStatus == SEC_E_INCOMPLETE_MESSAGE || securityStatus == SEC_I_INCOMPLETE_CREDENTIALS)
+ {
+ if (securityStatus == SEC_E_INCOMPLETE_MESSAGE)
+ {
+ if (doRead)
+ {
+ err = receiveRawBytes(ioBuffer+ioBufferIdx, IO_BUFFER_SIZE-ioBufferIdx);
+
+ if (err == SOCKET_ERROR || err == 0)
+ throw SSLException("Failed to receive data in handshake");
+ else
+ ioBufferIdx += err;
+ }
+ else doRead = TRUE;
+ }
+
+ AutoSecBufferDesc<2> inBuffer(&_securityFunctions, false);
+ AutoSecBufferDesc<1> outBuffer(&_securityFunctions, true);
+ inBuffer.setSecBufferToken(0, ioBuffer, ioBufferIdx);
+ inBuffer.setSecBufferEmpty(1);
+ outBuffer.setSecBufferToken(0, 0, 0);
+
+ securityStatus = _securityFunctions.AcceptSecurityContext(
+ phCred,
+ initContext ? NULL : phContext,
+ &inBuffer,
+ _serverFlags,
+ SECURITY_NATIVE_DREP,
+ initContext ? phContext : NULL,
+ &outBuffer,
+ &outFlags,
+ &tsExpiry);
+
+ initContext = FALSE;
+
+ if (securityStatus == SEC_E_OK || securityStatus == SEC_I_CONTINUE_NEEDED || (FAILED(securityStatus) && (0 != (outFlags & ISC_RET_EXTENDED_ERROR))))
+ {
+ if (outBuffer[0].cbBuffer != 0 && outBuffer[0].pvBuffer != 0)
+ {
+ err = sendRawBytes(outBuffer[0].pvBuffer, outBuffer[0].cbBuffer);
+ outBuffer.release(0);
+ }
+ }
+
+ if (securityStatus == SEC_E_OK )
+ {
+ if (inBuffer[1].BufferType == SECBUFFER_EXTRA)
+ {
+ memcpy(ioBuffer, ioBuffer + (ioBufferIdx - inBuffer[1].cbBuffer), inBuffer[1].cbBuffer);
+ ioBufferIdx = inBuffer[1].cbBuffer;
+ }
+ else ioBufferIdx = 0;
+ return true;
+ }
+ else if (FAILED(securityStatus) && (securityStatus != SEC_E_INCOMPLETE_MESSAGE))
+ {
+ throw SSLException("Handshake failure:", Utility::formatError(securityStatus));
+ }
+
+ if (securityStatus != SEC_E_INCOMPLETE_MESSAGE && securityStatus != SEC_I_INCOMPLETE_CREDENTIALS)
+ {
+ if (inBuffer[1].BufferType == SECBUFFER_EXTRA)
+ {
+ memcpy(ioBuffer, ioBuffer + (ioBufferIdx - inBuffer[1].cbBuffer), inBuffer[1].cbBuffer);
+ ioBufferIdx = inBuffer[1].cbBuffer;
+ }
+ else ioBufferIdx = 0;
+ }
+ }
+
+ return FALSE;
+}
+
+
+void SecureSocketImpl::clientVerifyCertificate(PCCERT_CONTEXT pServerCert, const std::string& serverName, DWORD dwCertFlags)
+{
+ if (_pContext->verificationMode() == Context::VERIFY_NONE)
+ return;
+
+ if (pServerCert == NULL)
+ throw SSLException("No Server certificate");
+
+ if (serverName.empty())
+ throw SSLException("Server name not set");
+
+ int iRc = CertVerifyTimeValidity(NULL,pServerCert->pCertInfo);
+ if (iRc != 0)
+ {
+ X509Certificate cert(pServerCert, true);
+ VerificationErrorArgs args(cert, 0, SEC_E_CERT_EXPIRED, "The certificate is expired");
+ SSLManager::instance().ClientVerificationError(this, args);
+ if (!args.getIgnoreError())
+ throw InvalidCertificateException("Expired certificate");
+ }
+
+ CERT_CHAIN_PARA chainPara;
+ PCCERT_CHAIN_CONTEXT pChainContext = NULL;
+ ZeroMemory(&chainPara, sizeof(chainPara));
+ chainPara.cbSize = sizeof(chainPara);
+
+ if (!CertGetCertificateChain(
+ NULL,
+ pServerCert,
+ NULL,
+ NULL,
+ &chainPara,
+ 0,
+ NULL,
+ &pChainContext))
+ {
+ CertFreeCertificateChain(pChainContext);
+ throw SSLException("Failed to get certificate chain", GetLastError());
+ }
+
+ verifyCertificateChainClient(pServerCert, pChainContext);
+}
+
+
+
+void SecureSocketImpl::verifyCertificateChainClient(PCCERT_CONTEXT pServerCert, PCCERT_CHAIN_CONTEXT pChainContext)
+{
+ X509Certificate cert(pServerCert, true);
+
+ HTTPSPolicyCallbackData polHttps;
+ memset(&polHttps, 0, sizeof(HTTPSPolicyCallbackData));
+ polHttps.cbStruct = sizeof(HTTPSPolicyCallbackData);
+ polHttps.dwAuthType = AUTHTYPE_SERVER;
+ polHttps.fdwChecks = SECURITY_FLAG_IGNORE_UNKNOWN_CA; // we do our own CA verification!
+ polHttps.pwszServerName = 0;// not supported on Win98, ME! but ignored on client side anyway
+
+ CERT_CHAIN_POLICY_PARA polPara;
+ memset(&polPara, 0, sizeof(polPara));
+ polPara.cbSize = sizeof(polPara);
+ polPara.pvExtraPolicyPara = &polHttps;
+
+ CERT_CHAIN_POLICY_STATUS polStatus;
+ memset(&polStatus, 0, sizeof(polStatus));
+ polStatus.cbSize = sizeof(polStatus);
+
+ if (!CertVerifyCertificateChainPolicy(
+ CERT_CHAIN_POLICY_SSL,
+ pChainContext,
+ &polPara,
+ &polStatus))
+ {
+ VerificationErrorArgs args(cert, 0, GetLastError(), "Failed to verify certificate chain");
+ SSLManager::instance().ClientVerificationError(this, args);
+ if (!args.getIgnoreError())
+ {
+ CertFreeCertificateChain(pChainContext);
+ throw SSLException("Failed to verify certificate chain");
+ }
+ else return;
+ }
+
+ if (polStatus.dwError)
+ {
+ VerificationErrorArgs args(cert, polStatus.lElementIndex, polStatus.dwError, Utility::formatError(polStatus.dwError));
+ SSLManager::instance().ClientVerificationError(this, args);
+ CertFreeCertificateChain(pChainContext);
+ if (!args.getIgnoreError())
+ {
+ throw SSLException("Failed to verify certificate chain");
+ }
+ else return;
+ }
+
+ // now verify CA's
+ HCERTSTORE trustedCerts = _pContext->certificateStore();
+ Poco::Buffer certs(pChainContext->cChain);
+ for (DWORD i = 0; i < pChainContext->cChain; i++)
+ {
+ certs[i] = (PCERT_CONTEXT)(pChainContext->rgpChain[i]->rgpElement[0]->pCertContext);
+ // each issuer of the pCert must be a member of the trustedCerts store
+ PCCERT_CONTEXT pResult = CertFindCertificateInStore(trustedCerts, certs[i]->dwCertEncodingType, 0, CERT_FIND_ISSUER_OF, certs[i], 0);
+
+ if (!pResult)
+ {
+ poco_assert_dbg (GetLastError() == CRYPT_E_NOT_FOUND);
+ VerificationErrorArgs args(cert, i, 0, "Certificate Authority not trusted");
+ SSLManager::instance().ClientVerificationError(this, args);
+ CertFreeCertificateChain(pChainContext);
+ if (!args.getIgnoreError())
+ throw CertificateValidationException("Failed to verify certificate chain: CA not trusted");
+ else
+ return;
+ }
+ CertFreeCertificateContext(pResult);
+ }
+
+#if !defined(_WIN32_WCE)
+ // check if cert is revoked
+ if (_pContext->options() & Context::OPT_PERFORM_REVOCATION_CHECK)
+ {
+ CERT_REVOCATION_STATUS revStat;
+ revStat.cbSize = sizeof(CERT_REVOCATION_STATUS);
+
+ PCERT_CONTEXT* pCerts = certs.begin();
+ BOOL rc = CertVerifyRevocation(
+ X509_ASN_ENCODING,
+ CERT_CONTEXT_REVOCATION_TYPE,
+ pChainContext->cChain,
+ (void **)pCerts,
+ CERT_VERIFY_REV_CHAIN_FLAG,
+ NULL,
+ &revStat);
+
+ if (FALSE == rc)
+ {
+ VerificationErrorArgs args(cert, revStat.dwIndex, revStat.dwReason, Utility::formatError(revStat.dwError));
+ SSLManager::instance().ClientVerificationError(this, args);
+ if (!args.getIgnoreError())
+ {
+ CertFreeCertificateChain(pChainContext);
+ throw SSLException("Failed to verify revoked certificate chain");
+ }
+ }
+ }
+#endif
+ CertFreeCertificateChain(pChainContext);
+}
+
+
+void SecureSocketImpl::serverVerifyCertificate(PCCERT_CONTEXT pPeerCert, DWORD dwCertFlags)
+{
+ if (_pContext->verificationMode() < Context::VERIFY_STRICT)
+ return;
+
+ DWORD status = SEC_E_OK;
+
+ X509Certificate cert(pPeerCert, true);
+ // we are now in Strict mode
+ if (pPeerCert == 0) throw SSLException("No client certificate");
+
+ int iRc = CertVerifyTimeValidity(NULL, pPeerCert->pCertInfo);
+ if (iRc != 0)
+ {
+ VerificationErrorArgs args(cert, 0, SEC_E_CERT_EXPIRED, "The certificate is expired");
+ SSLManager::instance().ServerVerificationError(this, args);
+
+ if (!args.getIgnoreError())
+ throw SSLException("Expired certificate");
+ else
+ return;
+ }
+
+ PCCERT_CHAIN_CONTEXT pChainContext = NULL;
+ CERT_CHAIN_PARA chainPara;
+ ZeroMemory(&chainPara, sizeof(chainPara));
+ chainPara.cbSize = sizeof(chainPara);
+
+ if (!CertGetCertificateChain(
+ NULL,
+ pPeerCert,
+ NULL,
+ NULL,
+ &chainPara,
+ CERT_CHAIN_REVOCATION_CHECK_CHAIN,
+ NULL,
+ &pChainContext))
+ {
+ VerificationErrorArgs args(cert, 0, GetLastError(), "The certificate chain is expired");
+ SSLManager::instance().ServerVerificationError(this, args);
+ if (pChainContext) CertFreeCertificateChain(pChainContext);
+ if (!args.getIgnoreError())
+ {
+ throw SSLException("The certificate chain is expired");
+ }
+ else return;
+ }
+
+ HTTPSPolicyCallbackData polHttps;
+ ZeroMemory(&polHttps, sizeof(HTTPSPolicyCallbackData));
+ polHttps.cbStruct = sizeof(HTTPSPolicyCallbackData);
+ polHttps.dwAuthType = AUTHTYPE_CLIENT;
+ polHttps.fdwChecks = dwCertFlags;
+ polHttps.pwszServerName = NULL;
+
+ CERT_CHAIN_POLICY_PARA policyPara;
+ memset(&policyPara, 0, sizeof(policyPara));
+ policyPara.cbSize = sizeof(policyPara);
+ policyPara.pvExtraPolicyPara = &polHttps;
+
+ CERT_CHAIN_POLICY_STATUS policyStatus;
+ memset(&policyStatus, 0, sizeof(policyStatus));
+ policyStatus.cbSize = sizeof(policyStatus);
+
+ if (!CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_SSL, pChainContext, &policyPara, &policyStatus))
+ {
+ VerificationErrorArgs args(cert, 0, GetLastError(), "Failed to verify certificate chain");
+ SSLManager::instance().ServerVerificationError(this, args);
+ if (pChainContext) CertFreeCertificateChain(pChainContext);
+ if (!args.getIgnoreError())
+ throw SSLException("Failed to verify certificate chain");
+ else
+ return;
+ }
+
+ if (policyStatus.dwError)
+ {
+ VerificationErrorArgs args(cert, policyStatus.lElementIndex, status, Utility::formatError(policyStatus.dwError));
+ SSLManager::instance().ServerVerificationError(this, args);
+ if (pChainContext) CertFreeCertificateChain(pChainContext);
+ if (!args.getIgnoreError())
+ throw SSLException("Failed to verify certificate chain");
+ else
+ return;
+ }
+
+#if !defined(_WIN32_WCE)
+ PCERT_CONTEXT *pCerts = new PCERT_CONTEXT[pChainContext->cChain];
+ for (DWORD i = 0; i < pChainContext->cChain; i++)
+ {
+ pCerts[i] = (PCERT_CONTEXT)(pChainContext->rgpChain[i]->rgpElement[0]->pCertContext);
+ }
+
+ CERT_REVOCATION_STATUS revStat;
+ revStat.cbSize = sizeof(CERT_REVOCATION_STATUS);
+
+ BOOL bRc = CertVerifyRevocation(
+ X509_ASN_ENCODING,
+ CERT_CONTEXT_REVOCATION_TYPE,
+ pChainContext->cChain,
+ (void **)pCerts,
+ CERT_VERIFY_REV_CHAIN_FLAG,
+ NULL,
+ &revStat);
+ if (!bRc)
+ {
+ VerificationErrorArgs args(cert, revStat.dwIndex, revStat.dwReason, Utility::formatError(revStat.dwReason));
+ SSLManager::instance().ServerVerificationError(this, args);
+ if (!args.getIgnoreError())
+ {
+ CertFreeCertificateChain(pChainContext);
+ delete [] pCerts;
+ throw SSLException("Failed to verify certificate chain");
+ }
+ }
+
+ delete [] pCerts;
+#endif
+ if (pChainContext)
+ {
+ CertFreeCertificateChain(pChainContext);
+ }
+}
+
+
+LONG SecureSocketImpl::clientDisconnect(PCredHandle phCreds, CtxtHandle *phContext)
+{
+ AutoSecBufferDesc<1> tokBuffer(&_securityFunctions, false);
+
+ DWORD dwType = SCHANNEL_SHUTDOWN;
+ tokBuffer.setSecBufferToken(0, &dwType, sizeof(dwType));
+ DWORD status = _securityFunctions.ApplyControlToken(phContext, &tokBuffer);
+
+ if (FAILED(status)) return status;
+
+ DWORD dwSSPIFlags = ISC_REQ_SEQUENCE_DETECT
+ | ISC_REQ_REPLAY_DETECT
+ | ISC_REQ_CONFIDENTIALITY
+ | ISC_RET_EXTENDED_ERROR
+ | ISC_REQ_ALLOCATE_MEMORY
+ | ISC_REQ_STREAM;
+
+ AutoSecBufferDesc<1> outBuffer(&_securityFunctions, true);
+ outBuffer.setSecBufferToken(0, 0, 0);
+
+ DWORD dwSSPIOutFlags;
+ TimeStamp tsExpiry;
+ status = _securityFunctions.InitializeSecurityContextW(
+ phCreds,
+ phContext,
+ NULL,
+ dwSSPIFlags,
+ 0,
+ SECURITY_NATIVE_DREP,
+ NULL,
+ 0,
+ phContext,
+ &outBuffer,
+ &dwSSPIOutFlags,
+ &tsExpiry);
+
+ return status;
+}
+
+
+LONG SecureSocketImpl::serverDisconnect(PCredHandle phCreds, CtxtHandle *phContext)
+{
+ AutoSecBufferDesc<1> tokBuffer(&_securityFunctions, false);
+
+ DWORD dwType = SCHANNEL_SHUTDOWN;
+ tokBuffer.setSecBufferToken(0, &dwType, sizeof(dwType));
+ DWORD status = _securityFunctions.ApplyControlToken(phContext, &tokBuffer);
+
+ if (FAILED(status)) return status;
+
+ DWORD dwSSPIFlags = ASC_REQ_SEQUENCE_DETECT
+ | ASC_REQ_REPLAY_DETECT
+ | ASC_REQ_CONFIDENTIALITY
+ | ASC_REQ_EXTENDED_ERROR
+ | ASC_REQ_ALLOCATE_MEMORY
+ | ASC_REQ_STREAM;
+
+ AutoSecBufferDesc<1> outBuffer(&_securityFunctions, true);
+ outBuffer.setSecBufferToken(0,0,0);
+
+ DWORD dwSSPIOutFlags;
+ TimeStamp tsExpiry;
+ status = _securityFunctions.AcceptSecurityContext(
+ phCreds,
+ phContext,
+ NULL,
+ dwSSPIFlags,
+ SECURITY_NATIVE_DREP,
+ NULL,
+ &outBuffer,
+ &dwSSPIOutFlags,
+ &tsExpiry);
+
+ if (FAILED(status)) return status;
+
+ PBYTE pbMessage = (BYTE *)(outBuffer[0].pvBuffer);
+ DWORD cbMessage = outBuffer[0].cbBuffer;
+
+ if (pbMessage != NULL && cbMessage != 0)
+ {
+ DWORD cbData = sendRawBytes(pbMessage, cbMessage);
+ if (cbData == SOCKET_ERROR || cbData == 0)
+ {
+ status = WSAGetLastError();
+ }
+ }
+
+ return status;
+}
+
+
+DWORD SecureSocketImpl::proto() const
+{
+ switch (_pContext->usage())
+ {
+ case Context::CLIENT_USE:
+ return SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_CLIENT;
+ case Context::SERVER_USE:
+ return SP_PROT_SSL3_SERVER | SP_PROT_TLS1_SERVER;
+ case Context::TLSV1_CLIENT_USE:
+ return SP_PROT_TLS1_CLIENT;
+ case Context::TLSV1_SERVER_USE:
+ return SP_PROT_TLS1_SERVER;
+#if defined(SP_PROT_TLS1_1)
+ case Context::TLSV1_1_CLIENT_USE:
+ return SP_PROT_TLS1_1_CLIENT;
+ case Context::TLSV1_1_SERVER_USE:
+ return SP_PROT_TLS1_1_SERVER;
+#endif
+#if defined(SP_PROT_TLS1_2)
+ case Context::TLSV1_2_CLIENT_USE:
+ return SP_PROT_TLS1_2_CLIENT;
+ case Context::TLSV1_2_SERVER_USE:
+ return SP_PROT_TLS1_2_SERVER;
+#endif
+ default:
+ throw Poco::InvalidArgumentException("Unsupported SSL/TLS protocol version");
+ }
+}
+
+
+void SecureSocketImpl::stateIllegal()
+{
+ throw Poco::IllegalStateException("SSL state machine");
+}
+
+
+void SecureSocketImpl::stateConnected()
+{
+ _hostName = _pSocket->address().host().toString();
+ initClientContext();
+ performInitialClientHandshake();
+}
+
+
+void SecureSocketImpl::stateMachine()
+{
+ StateMachine::instance().execute(this);
+}
+
+
+namespace
+{
+ static Poco::SingletonHolder stateMachineSingleton;
+}
+
+
+StateMachine& StateMachine::instance()
+{
+ return *stateMachineSingleton.get();
+}
+
+
+bool StateMachine::readable(SOCKET sockfd)
+{
+ fd_set fdRead;
+ FD_ZERO(&fdRead);
+ FD_SET(sockfd, &fdRead);
+ select(&fdRead, 0, sockfd);
+ return (FD_ISSET(sockfd, &fdRead) != 0);
+}
+
+
+bool StateMachine::writable(SOCKET sockfd)
+{
+ fd_set fdWrite;
+ FD_ZERO(&fdWrite);
+ FD_SET(sockfd, &fdWrite);
+ select(0, &fdWrite, sockfd);
+ return (FD_ISSET(sockfd, &fdWrite) != 0);
+}
+
+
+bool StateMachine::readOrWritable(SOCKET sockfd)
+{
+ fd_set fdRead, fdWrite;
+ FD_ZERO(&fdRead);
+ FD_SET(sockfd, &fdRead);
+ fdWrite = fdRead;
+ select(&fdRead, &fdWrite, sockfd);
+ return (FD_ISSET(sockfd, &fdRead) != 0 || FD_ISSET(sockfd, &fdWrite) != 0);
+}
+
+
+bool StateMachine::none(SOCKET sockfd)
+{
+ return true;
+}
+
+
+void StateMachine::select(fd_set* fdRead, fd_set* fdWrite, SOCKET sockfd)
+{
+ Poco::Timespan remainingTime(((Poco::Timestamp::TimeDiff)SecureSocketImpl::TIMEOUT_MILLISECS)*1000);
+ int rc(0);
+ do
+ {
+ struct timeval tv;
+ tv.tv_sec = (long) remainingTime.totalSeconds();
+ tv.tv_usec = (long) remainingTime.useconds();
+ Poco::Timestamp start;
+ rc = ::select(int(sockfd) + 1, fdRead, fdWrite, 0, &tv);
+ if (rc < 0 && SecureSocketImpl::lastError() == POCO_EINTR)
+ {
+ Poco::Timestamp end;
+ Poco::Timespan waited = end - start;
+ if (waited < remainingTime)
+ remainingTime -= waited;
+ else
+ remainingTime = 0;
+ }
+ }
+ while (rc < 0 && SecureSocketImpl::lastError() == POCO_EINTR);
+}
+
+
+StateMachine::StateMachine():
+ _states()
+{
+ //ST_INITIAL: 0, -> this one is illegal, you must call connectNB before
+ _states.push_back(std::make_pair(&StateMachine::none, &SecureSocketImpl::stateIllegal));
+ //ST_CONNECTING: connectNB was called, check if the socket is already available for writing
+ _states.push_back(std::make_pair(&StateMachine::writable, &SecureSocketImpl::stateConnected));
+ //ST_ESTABLISHTUNNELRECEIVED: we got the response, now start the handshake
+ _states.push_back(std::make_pair(&StateMachine::writable, &SecureSocketImpl::performInitialClientHandshake));
+ //ST_CLIENTHANDSHAKECONDREAD: condread
+ _states.push_back(std::make_pair(&StateMachine::readable, &SecureSocketImpl::performClientHandshakeLoopCondRead));
+ //ST_CLIENTHANDSHAKEINCOMPLETE,
+ _states.push_back(std::make_pair(&StateMachine::none, &SecureSocketImpl::performClientHandshakeLoopIncompleteMessage));
+ //ST_CLIENTHANDSHAKEOK,
+ _states.push_back(std::make_pair(&StateMachine::writable, &SecureSocketImpl::performClientHandshakeLoopOK));
+ //ST_CLIENTHANDSHAKEEXTERROR,
+ _states.push_back(std::make_pair(&StateMachine::writable, &SecureSocketImpl::performClientHandshakeLoopExtError));
+ //ST_CLIENTHANDSHAKECONTINUE,
+ _states.push_back(std::make_pair(&StateMachine::writable, &SecureSocketImpl::performClientHandshakeLoopContinueNeeded));
+ //ST_VERIFY,
+ _states.push_back(std::make_pair(&StateMachine::none, &SecureSocketImpl::clientConnectVerify));
+ //ST_DONE,
+ _states.push_back(std::make_pair(&StateMachine::none, &SecureSocketImpl::stateIllegal));
+ //ST_ERROR
+ _states.push_back(std::make_pair(&StateMachine::none, &SecureSocketImpl::performClientHandshakeLoopError));
+}
+
+
+void StateMachine::execute(SecureSocketImpl* pSock)
+{
+ try
+ {
+ poco_assert_dbg (pSock);
+ ConditionState& state = _states[pSock->getState()];
+ ConditionMethod& meth = state.first;
+ if ((this->*state.first)(pSock->sockfd()))
+ {
+ (pSock->*(state.second))();
+ (pSock->getState() == SecureSocketImpl::ST_DONE);
+ }
+ }
+ catch (...)
+ {
+ pSock->setState(SecureSocketImpl::ST_ERROR);
+ throw;
+ }
+}
+
+
+StateMachine::~StateMachine()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureStreamSocket.cpp b/NetSSL_Win/src/SecureStreamSocket.cpp
new file mode 100644
index 000000000..91c35a111
--- /dev/null
+++ b/NetSSL_Win/src/SecureStreamSocket.cpp
@@ -0,0 +1,271 @@
+//
+// SecureStreamSocket.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SecureStreamSocket.cpp#2 $
+//
+// Library: NetSSL_Win
+// Package: SSLSockets
+// Module: SecureStreamSocket
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SocketImpl.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Exception.h"
+
+
+using Poco::InvalidArgumentException;
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureStreamSocket::SecureStreamSocket():
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+}
+
+
+SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+}
+
+
+SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ useSession(pSession);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address):
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName):
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+ static_cast(impl())->setPeerHostName(hostName);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ useSession(pSession);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ static_cast(impl())->setPeerHostName(hostName);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ static_cast(impl())->setPeerHostName(hostName);
+ useSession(pSession);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const Socket& socket):
+ StreamSocket(socket)
+{
+ if (!dynamic_cast(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureStreamSocket::SecureStreamSocket(SocketImpl* pImpl):
+ StreamSocket(pImpl)
+{
+ if (!dynamic_cast(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureStreamSocket::~SecureStreamSocket()
+{
+}
+
+
+SecureStreamSocket& SecureStreamSocket::operator = (const Socket& socket)
+{
+ if (dynamic_cast(socket.impl()))
+ StreamSocket::operator = (socket);
+ else
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+ return *this;
+}
+
+
+bool SecureStreamSocket::havePeerCertificate() const
+{
+ return static_cast(impl())->havePeerCertificate();
+}
+
+
+X509Certificate SecureStreamSocket::peerCertificate() const
+{
+ return static_cast(impl())->peerCertificate();
+}
+
+
+void SecureStreamSocket::setPeerHostName(const std::string& hostName)
+{
+ static_cast(impl())->setPeerHostName(hostName);
+}
+
+
+const std::string& SecureStreamSocket::getPeerHostName() const
+{
+ return static_cast(impl())->getPeerHostName();
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), SSLManager::instance().defaultClientContext());
+ SecureStreamSocket result(pImpl);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.useSession(pSession);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), SSLManager::instance().defaultClientContext());
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ result.useSession(pSession);
+ pImpl->connectSSL();
+ return result;
+}
+
+
+Context::Ptr SecureStreamSocket::context() const
+{
+ return static_cast(impl())->context();
+}
+
+
+void SecureStreamSocket::setLazyHandshake(bool flag)
+{
+ static_cast(impl())->setLazyHandshake(flag);
+}
+
+
+bool SecureStreamSocket::getLazyHandshake() const
+{
+ return static_cast(impl())->getLazyHandshake();
+}
+
+
+void SecureStreamSocket::verifyPeerCertificate()
+{
+ static_cast(impl())->verifyPeerCertificate();
+}
+
+
+void SecureStreamSocket::verifyPeerCertificate(const std::string& hostName)
+{
+ static_cast(impl())->verifyPeerCertificate(hostName);
+}
+
+
+int SecureStreamSocket::completeHandshake()
+{
+ return static_cast(impl())->completeHandshake();
+}
+
+
+Session::Ptr SecureStreamSocket::currentSession()
+{
+ return static_cast(impl())->currentSession();
+}
+
+
+void SecureStreamSocket::useSession(Session::Ptr pSession)
+{
+ static_cast(impl())->useSession(pSession);
+}
+
+
+bool SecureStreamSocket::sessionWasReused()
+{
+ return static_cast(impl())->sessionWasReused();
+}
+
+
+void SecureStreamSocket::abort()
+{
+ static_cast(impl())->abort();
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/SecureStreamSocketImpl.cpp b/NetSSL_Win/src/SecureStreamSocketImpl.cpp
new file mode 100644
index 000000000..0a8c5f135
--- /dev/null
+++ b/NetSSL_Win/src/SecureStreamSocketImpl.cpp
@@ -0,0 +1,221 @@
+//
+// SecureStreamSocketImpl.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/SecureStreamSocketImpl.cpp#6 $
+//
+// Library: NetSSL_Win
+// Package: SSLSockets
+// Module: SecureStreamSocketImpl
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Thread.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureStreamSocketImpl::SecureStreamSocketImpl(Context::Ptr pContext):
+ _impl(new StreamSocketImpl, pContext),
+ _lazyHandshake(false)
+{
+}
+
+
+SecureStreamSocketImpl::SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext):
+ _impl(pStreamSocket, pContext),
+ _lazyHandshake(false)
+{
+ pStreamSocket->duplicate();
+ reset(_impl.sockfd());
+}
+
+
+SecureStreamSocketImpl::~SecureStreamSocketImpl()
+{
+ reset();
+}
+
+
+SocketImpl* SecureStreamSocketImpl::acceptConnection(SocketAddress& clientAddr)
+{
+ throw Poco::InvalidAccessException("Cannot acceptConnection() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::acceptSSL()
+{
+ _impl.acceptSSL();
+}
+
+
+void SecureStreamSocketImpl::connect(const SocketAddress& address)
+{
+ _impl.connect(address, !_lazyHandshake);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout)
+{
+ _impl.connect(address, timeout, !_lazyHandshake);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connectNB(const SocketAddress& address)
+{
+ _impl.connectNB(address);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connectSSL()
+{
+ _impl.connectSSL(!_lazyHandshake);
+}
+
+
+void SecureStreamSocketImpl::bind(const SocketAddress& address, bool reuseAddress)
+{
+ throw Poco::InvalidAccessException("Cannot bind() a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::listen(int backlog)
+{
+ throw Poco::InvalidAccessException("Cannot listen() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::close()
+{
+ reset();
+ _impl.close();
+}
+
+
+void SecureStreamSocketImpl::abort()
+{
+ reset();
+ _impl.abort();
+}
+
+
+int SecureStreamSocketImpl::sendBytes(const void* buffer, int length, int flags)
+{
+ return _impl.sendBytes(buffer, length, flags);
+}
+
+
+int SecureStreamSocketImpl::receiveBytes(void* buffer, int length, int flags)
+{
+ return _impl.receiveBytes(buffer, length, flags);
+}
+
+
+int SecureStreamSocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot sendTo() on a SecureStreamSocketImpl");
+}
+
+
+int SecureStreamSocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags)
+{
+ throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::sendUrgent(unsigned char data)
+{
+ throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureStreamSocketImpl");
+}
+
+
+int SecureStreamSocketImpl::available()
+{
+ return 0; // TODO _impl.available();
+}
+
+
+void SecureStreamSocketImpl::shutdownReceive()
+{
+}
+
+
+void SecureStreamSocketImpl::shutdownSend()
+{
+}
+
+
+void SecureStreamSocketImpl::shutdown()
+{
+ _impl.shutdown();
+}
+
+
+bool SecureStreamSocketImpl::secure() const
+{
+ return true;
+}
+
+
+bool SecureStreamSocketImpl::havePeerCertificate() const
+{
+ return _impl.peerCertificate() != 0;
+}
+
+
+X509Certificate SecureStreamSocketImpl::peerCertificate() const
+{
+ if (havePeerCertificate())
+ {
+ return X509Certificate(_impl.peerCertificate(), true);
+ }
+ else throw SSLException("No certificate available");
+}
+
+
+void SecureStreamSocketImpl::setLazyHandshake(bool flag)
+{
+ _lazyHandshake = flag;
+}
+
+
+bool SecureStreamSocketImpl::getLazyHandshake() const
+{
+ return _lazyHandshake;
+}
+
+
+void SecureStreamSocketImpl::verifyPeerCertificate()
+{
+ // TODO
+ // _impl.verifyPeerCertificate();
+}
+
+
+void SecureStreamSocketImpl::verifyPeerCertificate(const std::string& hostName)
+{
+ // TODO
+ // _impl.verifyPeerCertificate(hostName);
+}
+
+
+int SecureStreamSocketImpl::completeHandshake()
+{
+ // TODO
+ // return _impl.completeHandshake();
+ return 0;
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/Session.cpp b/NetSSL_Win/src/Session.cpp
new file mode 100644
index 000000000..24a521482
--- /dev/null
+++ b/NetSSL_Win/src/Session.cpp
@@ -0,0 +1,40 @@
+//
+// Session.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/Session.cpp#2 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: Session
+//
+// Copyright (c) 2010-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#if defined(__APPLE__)
+// Some OpenSSL functions are deprecated in OS X 10.7
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+
+#include "Poco/Net/Session.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+Session::Session()
+{
+}
+
+
+Session::~Session()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/Utility.cpp b/NetSSL_Win/src/Utility.cpp
new file mode 100644
index 000000000..524cfffd8
--- /dev/null
+++ b/NetSSL_Win/src/Utility.cpp
@@ -0,0 +1,205 @@
+//
+// Utility.cpp
+//
+// $Id: //poco/1.4/NetSSL_Schannel/src/Utility.cpp#1 $
+//
+// Library: NetSSL_Schannel
+// Package: SSLCore
+// Module: Utility
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/Utility.h"
+#include "Poco/String.h"
+#include "Poco/NumberFormatter.h"
+#include "Poco/Util/OptionException.h"
+#include
+#include
+
+
+namespace Poco {
+namespace Net {
+
+
+Poco::FastMutex Utility::_mutex;
+
+
+Context::VerificationMode Utility::convertVerificationMode(const std::string& vMode)
+{
+ std::string mode = Poco::toLower(vMode);
+ Context::VerificationMode verMode = Context::VERIFY_STRICT;
+
+ if (mode == "none")
+ verMode = Context::VERIFY_NONE;
+ else if (mode == "relaxed")
+ verMode = Context::VERIFY_RELAXED;
+ else if (mode == "strict")
+ verMode = Context::VERIFY_STRICT;
+ else
+ throw Poco::Util::OptionException(std::string("Wrong value >") + vMode + std::string("< for a verificationMode. Can only be none, relaxed, strict or once."));
+
+ return verMode;
+}
+
+
+inline void add(std::map& messageMap, long key, const std::string& val)
+{
+ messageMap.insert(std::make_pair(key, val));
+}
+
+
+std::map Utility::initSSPIErr()
+{
+ std::map messageMap;
+ add(messageMap, NTE_BAD_UID, "Bad UID");
+ add(messageMap, NTE_BAD_HASH, "Bad Hash");
+ add(messageMap, NTE_BAD_KEY, "Bad Key");
+ add(messageMap, NTE_BAD_LEN, "Bad Length");
+ add(messageMap, NTE_BAD_DATA, "Bad Data");
+ add(messageMap, NTE_BAD_SIGNATURE, "Invalid signature");
+ add(messageMap, NTE_BAD_VER, "Bad Version of provider");
+ add(messageMap, NTE_BAD_ALGID, "Invalid algorithm specified");
+ add(messageMap, NTE_BAD_FLAGS, "Invalid flags specified");
+ add(messageMap, NTE_BAD_TYPE, "Invalid type specified");
+ add(messageMap, NTE_BAD_KEY_STATE, "Key not valid for use in specified state");
+ add(messageMap, NTE_BAD_HASH_STATE, "Hash not valid for use in specified state");
+ add(messageMap, NTE_NO_KEY, "Key does not exist");
+ add(messageMap, NTE_NO_MEMORY, "Insufficient memory available for the operation");
+ add(messageMap, NTE_EXISTS, "Object already exists");
+ add(messageMap, NTE_PERM, "Permission denied");
+ add(messageMap, NTE_NOT_FOUND, "Object was not found");
+ add(messageMap, NTE_DOUBLE_ENCRYPT, "Data already encrypted");
+ add(messageMap, NTE_BAD_PROVIDER, "Invalid provider specified");
+ add(messageMap, NTE_BAD_PROV_TYPE, "Invalid provider type specified");
+ add(messageMap, NTE_BAD_PUBLIC_KEY, "Provider's public key is invalid");
+ add(messageMap, NTE_BAD_KEYSET, "Keyset does not exist");
+ add(messageMap, NTE_PROV_TYPE_NOT_DEF, "Provider type not defined");
+ add(messageMap, NTE_PROV_TYPE_ENTRY_BAD, "Provider type as registered is invalid");
+ add(messageMap, NTE_KEYSET_NOT_DEF, "The keyset is not defined");
+ add(messageMap, NTE_KEYSET_ENTRY_BAD, "Keyset as registered is invalid");
+ add(messageMap, NTE_PROV_TYPE_NO_MATCH, "Provider type does not match registered value");
+ add(messageMap, NTE_SIGNATURE_FILE_BAD, "The digital signature file is corrupt");
+ add(messageMap, NTE_PROVIDER_DLL_FAIL, "Provider DLL failed to initialize correctly");
+ add(messageMap, NTE_PROV_DLL_NOT_FOUND, "Provider DLL could not be found");
+ add(messageMap, NTE_BAD_KEYSET_PARAM, "The Keyset parameter is invalid");
+ add(messageMap, NTE_FAIL, "NTE_FAIL: An internal error occurred");
+ add(messageMap, NTE_SYS_ERR, "NTE_SYS_ERR: A base error occurred");
+ add(messageMap, NTE_SILENT_CONTEXT, "Provider could not perform the action since the context was acquired as silent");
+ add(messageMap, NTE_TOKEN_KEYSET_STORAGE_FULL, "The security token does not have storage space available for an additional container");
+ add(messageMap, NTE_TEMPORARY_PROFILE, "The profile for the user is a temporary profile");
+ add(messageMap, NTE_FIXEDPARAMETER, "The key parameters could not be set because the CSP uses fixed parameters");
+ add(messageMap, SEC_E_INSUFFICIENT_MEMORY, "Not enough memory is available to complete this request");
+ add(messageMap, SEC_E_INVALID_HANDLE, "The handle specified is invalid");
+ add(messageMap, SEC_E_UNSUPPORTED_FUNCTION, "The function requested is not supported");
+ add(messageMap, SEC_E_TARGET_UNKNOWN, "The specified target is unknown or unreachable");
+ add(messageMap, SEC_E_INTERNAL_ERROR, "The Local Security Authority cannot be contacted");
+ add(messageMap, SEC_E_SECPKG_NOT_FOUND, "The requested security package does not exist");
+ add(messageMap, SEC_E_NOT_OWNER, "The caller is not the owner of the desired credentials");
+ add(messageMap, SEC_E_CANNOT_INSTALL, "The security package failed to initialize, and cannot be installed");
+ add(messageMap, SEC_E_INVALID_TOKEN, "The token supplied to the function is invalid");
+ add(messageMap, SEC_E_CANNOT_PACK, "The security package is not able to marshall the logon buffer, so the logon attempt has failed");
+ add(messageMap, SEC_E_QOP_NOT_SUPPORTED, "The per-message Quality of Protection is not supported by the security package");
+ add(messageMap, SEC_E_NO_IMPERSONATION, "The security context does not allow impersonation of the client");
+ add(messageMap, SEC_E_LOGON_DENIED, "The logon attempt failed");
+ add(messageMap, SEC_E_UNKNOWN_CREDENTIALS, "The credentials supplied to the package were not recognized");
+ add(messageMap, SEC_E_NO_CREDENTIALS, "No credentials are available in the security package");
+ add(messageMap, SEC_E_MESSAGE_ALTERED, "The message or signature supplied for verification has been altered");
+ add(messageMap, SEC_E_OUT_OF_SEQUENCE, "The message supplied for verification is out of sequence");
+ add(messageMap, SEC_E_NO_AUTHENTICATING_AUTHORITY, "No authority could be contacted for authentication");
+ add(messageMap, SEC_I_CONTINUE_NEEDED, "The function completed successfully, but must be called again to complete the context");
+ add(messageMap, SEC_I_COMPLETE_NEEDED, "The function completed successfully, but CompleteToken must be called");
+ add(messageMap, SEC_I_COMPLETE_AND_CONTINUE, "The function completed successfully, but both CompleteToken and this function must be called to complete the context");
+ add(messageMap, SEC_I_LOCAL_LOGON, "The logon was completed, but no network authority was available. The logon was made using locally known information");
+ add(messageMap, SEC_E_BAD_PKGID, "The requested security package does not exist");
+ add(messageMap, SEC_E_CONTEXT_EXPIRED, "The context has expired and can no longer be used");
+ add(messageMap, SEC_E_INCOMPLETE_MESSAGE, "The supplied message is incomplete. The signature was not verified");
+ add(messageMap, SEC_E_INCOMPLETE_CREDENTIALS, "The credentials supplied were not complete, and could not be verified. The context could not be initialized");
+ add(messageMap, SEC_E_BUFFER_TOO_SMALL, "The buffers supplied to a function was too small");
+ add(messageMap, SEC_I_RENEGOTIATE, "The context data must be renegotiated with the peer");
+ add(messageMap, SEC_E_WRONG_PRINCIPAL, "The target principal name is incorrect");
+ add(messageMap, SEC_I_NO_LSA_CONTEXT, "There is no LSA mode context associated with this context");
+ add(messageMap, SEC_E_TIME_SKEW, "The clocks on the client and server machines are skewed");
+ add(messageMap, SEC_E_UNTRUSTED_ROOT, "The certificate chain was issued by an authority that is not trusted");
+ add(messageMap, SEC_E_ILLEGAL_MESSAGE, "The message received was unexpected or badly formatted");
+ add(messageMap, SEC_E_CERT_UNKNOWN, "An unknown error occurred while processing the certificate");
+ add(messageMap, SEC_E_CERT_EXPIRED, "The received certificate has expired");
+ add(messageMap, SEC_E_ENCRYPT_FAILURE, "The specified data could not be encrypted");
+ add(messageMap, SEC_E_DECRYPT_FAILURE, "The specified data could not be decrypted");
+ add(messageMap, SEC_E_ALGORITHM_MISMATCH, "The client and server cannot communicate, because they do not possess a common algorithm");
+ add(messageMap, SEC_E_SECURITY_QOS_FAILED, "The security context could not be established due to a failure in the requested quality of service (e.g. mutual authentication or delegation)");
+ add(messageMap, SEC_E_UNFINISHED_CONTEXT_DELETED, "A security context was deleted before the context was completed. This is considered a logon failure");
+ add(messageMap, SEC_E_NO_TGT_REPLY, "The client is trying to negotiate a context and the server requires user-to-user but didn't send a TGT reply");
+ add(messageMap, SEC_E_NO_IP_ADDRESSES, "Unable to accomplish the requested task because the local machine does not have any IP addresses");
+ add(messageMap, SEC_E_WRONG_CREDENTIAL_HANDLE, "The supplied credential handle does not match the credential associated with the security context");
+ add(messageMap, SEC_E_CRYPTO_SYSTEM_INVALID, "The crypto system or checksum function is invalid because a required function is unavailable");
+ add(messageMap, SEC_E_MAX_REFERRALS_EXCEEDED, "The number of maximum ticket referrals has been exceeded");
+ add(messageMap, SEC_E_MUST_BE_KDC, "The local machine must be a Kerberos KDC (domain controller) and it is not");
+ add(messageMap, SEC_E_STRONG_CRYPTO_NOT_SUPPORTED, "The other end of the security negotiation is requires strong crypto but it is not supported on the local machine");
+ add(messageMap, SEC_E_TOO_MANY_PRINCIPALS, "The KDC reply contained more than one principal name");
+ add(messageMap, SEC_E_NO_PA_DATA, "Expected to find PA data for a hint of what type to use, but it was not found");
+ //80092001
+ add(messageMap, CRYPT_E_SELF_SIGNED, "The specified certificate is self signed");
+ add(messageMap, CRYPT_E_DELETED_PREV, "The previous certificate or CRL context was deleted");
+ add(messageMap, CRYPT_E_NO_MATCH, "Cannot find the requested object");
+ add(messageMap, CRYPT_E_UNEXPECTED_MSG_TYPE, "The certificate does not have a property that references a private key");
+ add(messageMap, CRYPT_E_NO_KEY_PROPERTY, "Cannot find the certificate and private key for decryption");
+ add(messageMap, CRYPT_E_NO_DECRYPT_CERT, "Cannot find the certificate and private key to use for decryption");
+ add(messageMap, CRYPT_E_BAD_MSG, "Not a cryptographic message or the cryptographic message is not formatted correctly");
+ add(messageMap, CRYPT_E_NO_SIGNER, "The signed cryptographic message does not have a signer for the specified signer index");
+ add(messageMap, CRYPT_E_PENDING_CLOSE, "Final closure is pending until additional frees or closes");
+ add(messageMap, CRYPT_E_REVOKED, "The certificate is revoked");
+ add(messageMap, CRYPT_E_NO_REVOCATION_DLL, "No Dll or exported function was found to verify revocation");
+ add(messageMap, CRYPT_E_NO_REVOCATION_CHECK, "The revocation function was unable to check revocation for the certificate");
+ add(messageMap, CRYPT_E_REVOCATION_OFFLINE, "The revocation function was unable to check revocation because the revocation server was offline");
+ add(messageMap, CRYPT_E_NOT_IN_REVOCATION_DATABASE, "The certificate is not in the revocation server's database");
+ add(messageMap, CRYPT_E_INVALID_NUMERIC_STRING, "The string contains a non-numeric character");
+ add(messageMap, CRYPT_E_INVALID_PRINTABLE_STRING, "The string contains a non-printable character");
+ add(messageMap, CRYPT_E_INVALID_IA5_STRING, "The string contains a character not in the 7 bit ASCII character set");
+ add(messageMap, CRYPT_E_INVALID_X500_STRING, "The string contains an invalid X500 name attribute key, oid, value or delimiter");
+ add(messageMap, CRYPT_E_NOT_CHAR_STRING, "The dwValueType for the CERT_NAME_VALUE is not one of the character strings. Most likely it is either a CERT_RDN_ENCODED_BLOB or CERT_TDN_OCTED_STRING");
+ add(messageMap, CRYPT_E_FILERESIZED, "The Put operation can not continue. The file needs to be resized. However, there is already a signature present. A complete signing operation must be done");
+ add(messageMap, CRYPT_E_SECURITY_SETTINGS, "The cryptographic operation failed due to a local security option setting");
+ add(messageMap, CRYPT_E_NO_VERIFY_USAGE_DLL, "No DLL or exported function was found to verify subject usage");
+ add(messageMap, CRYPT_E_NO_VERIFY_USAGE_CHECK, "The called function was unable to do a usage check on the subject");
+ add(messageMap, CRYPT_E_VERIFY_USAGE_OFFLINE, "Since the server was offline, the called function was unable to complete the usage check");
+ add(messageMap, CRYPT_E_NOT_IN_CTL, "The subject was not found in a Certificate Trust List (CTL)");
+ add(messageMap, CRYPT_E_NO_TRUSTED_SIGNER, "None of the signers of the cryptographic message or certificate trust list is trusted");
+ add(messageMap, CRYPT_E_MISSING_PUBKEY_PARA, "The public key's algorithm parameters are missing");
+ add(messageMap, TRUST_E_CERT_SIGNATURE, "The signature of the certificate cannot be verified.");
+ add(messageMap, TRUST_E_BASIC_CONSTRAINTS, "The basic constraints of the certificate are not valid or missing");
+ add(messageMap, CERT_E_UNTRUSTEDROOT, "A certification chain processed correctly but terminated in a root certificate not trusted by the trust provider");
+ add(messageMap, CERT_E_UNTRUSTEDTESTROOT, "The root certificate is a testing certificate and policy settings disallow test certificates");
+ add(messageMap, CERT_E_CHAINING, "A chain of certificates was not correctly created");
+ add(messageMap, CERT_E_WRONG_USAGE, "The certificate is not valid for the requested usage");
+ add(messageMap, CERT_E_EXPIRED, "A required certificate is not within its validity period");
+ add(messageMap, CERT_E_VALIDITYPERIODNESTING, "The validity periods of the certification chain do not nest correctly");
+ add(messageMap, CERT_E_PURPOSE, "A certificate is being used for a purpose that is not supported");
+ add(messageMap, CERT_E_ROLE, "A certificate that can only be used as an end entity is being used as a CA or visa versa");
+ add(messageMap, CERT_E_CN_NO_MATCH, "The CN name of the certificate does not match the passed value");
+ add(messageMap, CERT_E_REVOKED, "A certificate in the chain has been explicitly revoked by its issuer");
+ add(messageMap, CERT_E_REVOCATION_FAILURE, "The revocation process could not continue. The certificates could not be checked");
+ return messageMap;
+}
+
+
+const std::string& Utility::formatError(long errCode)
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ static const std::string def("Internal SSPI error");
+ static const std::map errs(initSSPIErr());
+
+ const std::map::const_iterator it = errs.find(errCode);
+ if (it != errs.end())
+ return it->second;
+ else
+ return def;
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/VerificationErrorArgs.cpp b/NetSSL_Win/src/VerificationErrorArgs.cpp
new file mode 100644
index 000000000..121a91c47
--- /dev/null
+++ b/NetSSL_Win/src/VerificationErrorArgs.cpp
@@ -0,0 +1,39 @@
+//
+// VerificationErrorArgs.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/src/VerificationErrorArgs.cpp#1 $
+//
+// Library: NetSSL_Win
+// Package: SSLCore
+// Module: VerificationErrorArgs
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/VerificationErrorArgs.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+VerificationErrorArgs::VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg):
+ _cert(cert),
+ _errorDepth(errDepth),
+ _errorNumber(errNum),
+ _errorMessage(errMsg),
+ _ignoreError(false)
+{
+}
+
+
+VerificationErrorArgs::~VerificationErrorArgs()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/src/X509Certificate.cpp b/NetSSL_Win/src/X509Certificate.cpp
new file mode 100644
index 000000000..5e4f54395
--- /dev/null
+++ b/NetSSL_Win/src/X509Certificate.cpp
@@ -0,0 +1,256 @@
+//
+// X509Certificate.cpp
+//
+// $Id: //poco/1.4/Crypto/src/X509Certificate.cpp#1 $
+//
+// Library: Crypto
+// Package: Certificate
+// Module: X509Certificate
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/X509Certificate.h"
+#include "Poco/StreamCopier.h"
+#include "Poco/String.h"
+#include "Poco/DateTimeParser.h"
+#include "Poco/Base64Encoder.h"
+#include "Poco/Base64Decoder.h"
+#include "Poco/FileStream.h"
+#include "Poco/UnicodeConverter.h"
+#include
+
+
+namespace Poco {
+namespace Net {
+
+
+X509Certificate::X509Certificate(std::istream& istr):
+ _pCert(0)
+{
+ load(istr);
+}
+
+
+X509Certificate::X509Certificate(const std::string& path):
+ _pCert(0)
+{
+ load(path);
+}
+
+
+X509Certificate::X509Certificate(PCCERT_CONTEXT pCert):
+ _pCert(pCert)
+{
+ poco_check_ptr(_pCert);
+
+ init();
+}
+
+
+X509Certificate::X509Certificate(const X509Certificate& cert):
+ _issuerName(cert._issuerName),
+ _subjectName(cert._subjectName),
+ _pCert(cert._pCert)
+{
+ _pCert = CertDuplicateCertificateContext(_pCert);
+}
+
+
+X509Certificate::X509Certificate(PCCERT_CONTEXT pCert, bool shared):
+ _pCert(pCert)
+{
+ poco_check_ptr(_pCert);
+
+ if (shared)
+ {
+ _pCert = CertDuplicateCertificateContext(_pCert);
+ }
+
+ init();
+}
+
+
+X509Certificate& X509Certificate::operator = (const X509Certificate& cert)
+{
+ X509Certificate tmp(cert);
+ swap(tmp);
+ return *this;
+}
+
+
+void X509Certificate::swap(X509Certificate& cert)
+{
+ using std::swap;
+ swap(cert._issuerName, _issuerName);
+ swap(cert._subjectName, _subjectName);
+ swap(cert._pCert, _pCert);
+}
+
+
+X509Certificate::~X509Certificate()
+{
+ CertFreeCertificateContext(_pCert);
+}
+
+
+void X509Certificate::load(std::istream& istr)
+{
+ poco_assert (!_pCert);
+
+ // TODO
+
+ init();
+}
+
+
+void X509Certificate::load(const std::string& path)
+{
+ Poco::FileInputStream istr(path);
+ load(istr);
+}
+
+
+void X509Certificate::save(std::ostream& stream) const
+{
+ // TODO
+}
+
+
+void X509Certificate::save(const std::string& path) const
+{
+ Poco::FileOutputStream ostr(path);
+ save(ostr);
+}
+
+
+void X509Certificate::init()
+{
+ wchar_t data[256];
+ CertGetNameStringW(_pCert, CERT_NAME_SIMPLE_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL, data, 256);
+ Poco::UnicodeConverter::convert(data, _issuerName);
+ CertGetNameStringW(_pCert, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, data, 256);
+ Poco::UnicodeConverter::convert(data, _subjectName);
+}
+
+
+std::string X509Certificate::commonName() const
+{
+ return subjectName(NID_COMMON_NAME);
+}
+
+
+std::string X509Certificate::issuerName(NID nid) const
+{
+ std::string result;
+ wchar_t data[256];
+ CertGetNameStringW(_pCert, CERT_NAME_ATTR_TYPE, CERT_NAME_ISSUER_FLAG, nid2oid(nid), data, 256);
+ Poco::UnicodeConverter::convert(data, result);
+ return result;
+}
+
+
+std::string X509Certificate::subjectName(NID nid) const
+{
+ std::string result;
+ wchar_t data[256];
+ CertGetNameStringW(_pCert, CERT_NAME_ATTR_TYPE, 0, nid2oid(nid), data, 256);
+ Poco::UnicodeConverter::convert(data, result);
+ return result;
+}
+
+
+void X509Certificate::extractNames(std::string& cmnName, std::set& domainNames) const
+{
+ domainNames.clear();
+ // TODO: extract subject alternative names
+ cmnName = commonName();
+ if (!cmnName.empty() && domainNames.empty())
+ {
+ domainNames.insert(cmnName);
+ }
+}
+
+
+Poco::DateTime X509Certificate::validFrom() const
+{
+ Poco::Timestamp ts = Poco::Timestamp::fromFileTimeNP(_pCert->pCertInfo->NotBefore.dwLowDateTime, _pCert->pCertInfo->NotBefore.dwHighDateTime);
+ return Poco::DateTime(ts);
+}
+
+
+Poco::DateTime X509Certificate::expiresOn() const
+{
+ Poco::Timestamp ts = Poco::Timestamp::fromFileTimeNP(_pCert->pCertInfo->NotAfter.dwLowDateTime, _pCert->pCertInfo->NotAfter.dwHighDateTime);
+ return Poco::DateTime(ts);
+}
+
+
+bool X509Certificate::issuedBy(const X509Certificate& issuerCertificate) const
+{
+ HCERTSTORE hCertStore = CertOpenSystemStoreW(NULL, L"CA");
+ if (!hCertStore) throw Poco::SystemException("Cannot open CA store");
+ // TODO
+ try
+ {
+ PCCERT_CONTEXT pIssuer = 0;
+ do
+ {
+ DWORD flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG | CERT_STORE_TIME_VALIDITY_FLAG;
+ pIssuer = CertGetIssuerCertificateFromStore(hCertStore, _pCert, 0, &flags);
+ if (pIssuer)
+ {
+ X509Certificate issuer(pIssuer);
+ if (flags & CERT_STORE_NO_CRL_FLAG)
+ flags &= ~(CERT_STORE_NO_CRL_FLAG | CERT_STORE_REVOCATION_FLAG);
+ if (flags)
+ break;
+ }
+ else break;
+ }
+ while (pIssuer);
+ }
+ catch (...)
+ {
+ }
+ return false;
+}
+
+
+void* X509Certificate::nid2oid(NID nid)
+{
+ const char* result = 0;
+ switch (nid)
+ {
+ case NID_COMMON_NAME:
+ result = szOID_COMMON_NAME;
+ break;
+ case NID_COUNTRY:
+ result = szOID_COUNTRY_NAME;
+ break;
+ case NID_LOCALITY_NAME:
+ result = szOID_LOCALITY_NAME;
+ break;
+ case NID_STATE_OR_PROVINCE:
+ result = szOID_STATE_OR_PROVINCE_NAME;
+ break;
+ case NID_ORGANIZATION_NAME:
+ result = szOID_ORGANIZATION_NAME;
+ break;
+ case NID_ORGANIZATION_UNIT_NAME:
+ result = szOID_ORGANIZATIONAL_UNIT_NAME;
+ break;
+ default:
+ poco_bugcheck();
+ result = "";
+ break;
+ }
+ return const_cast(result);
+}
+
+
+} } // namespace Poco::Net
diff --git a/NetSSL_Win/testsuite/TestSuite.progen b/NetSSL_Win/testsuite/TestSuite.progen
new file mode 100644
index 000000000..dcc2941f4
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite.progen
@@ -0,0 +1,18 @@
+vc.project.guid = 25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28
+vc.project.name = TestSuite
+vc.project.target = TestSuite
+vc.project.type = testsuite
+vc.project.pocobase = ..\\..
+vc.project.platforms = Win32, x64, WinCE
+vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md
+vc.project.prototype = TestSuite_vs90.vcproj
+vc.project.compiler.include = ..\\..\\Foundation\\include;..\\..\\XML\\include;..\\..\\Util\\include;..\\..\\Net\\include
+vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib Crypt32.lib
+vc.project.linker.dependencies.x64 = ws2_32.lib iphlpapi.lib Crypt32.lib
+vc.project.linker.dependencies.WinCE = ws2.lib iphlpapi.lib Crypt32.lib
+vc.project.linker.dependencies.debug_shared =
+vc.project.linker.dependencies.release_shared =
+vc.project.linker.dependencies.debug_static_md =
+vc.project.linker.dependencies.release_static_md =
+vc.project.linker.dependencies.debug_static_mt =
+vc.project.linker.dependencies.release_static_mt =
diff --git a/NetSSL_Win/testsuite/TestSuite.xml b/NetSSL_Win/testsuite/TestSuite.xml
new file mode 100644
index 000000000..2c03eb7be
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite.xml
@@ -0,0 +1,29 @@
+
+
+
+ ${system.nodeName}
+ none
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+ relaxed
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+
+
+ proxy.aon.at
+ 8080
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_CE_vs90.vcproj b/NetSSL_Win/testsuite/TestSuite_CE_vs90.vcproj
new file mode 100644
index 000000000..e7952fcd5
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_CE_vs90.vcproj
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj
new file mode 100644
index 000000000..a2f485573
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj
@@ -0,0 +1,334 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V300
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V300
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V300
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitd.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ CppUnit.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmtd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmt.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmdd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters
new file mode 100644
index 000000000..72d9ae8ed
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {af7c73a9-a83b-4212-b986-67f014409efc}
+
+
+ {c41aa2f9-17a5-442e-9ae6-3d72662aa135}
+
+
+ {c256c551-e3de-4891-bfd5-7ef78afa9041}
+
+
+ {70b009fe-43da-4eb9-910f-505cb0a95e12}
+
+
+ {1bca9936-cc21-4928-a09f-be19dd3f0b9b}
+
+
+ {f72c94b3-cc0b-4f57-ab7e-901e713773fd}
+
+
+ {877a8657-cd99-4f91-8c5e-cc0bd8e30dfa}
+
+
+ {394ad351-30d3-4707-86ee-2a31a5f11755}
+
+
+ {41535f38-38bf-4123-87bc-14101992c785}
+
+
+ {a8590c6e-57e5-4688-a0f2-0012ec6718b8}
+
+
+ {74725857-94dc-462f-83c6-d297def7d65e}
+
+
+ {174e16fc-48af-4ae1-8783-bc94d6d0c13b}
+
+
+ {32a82fd6-3f46-4c3f-bcde-7c827d0f89b7}
+
+
+ {ae962b68-d44e-4f22-8dea-5f13ab03a735}
+
+
+ {cf7fa9cc-93cc-41a9-ae5e-4b45e6992813}
+
+
+ {4b0334e6-9e8d-4faa-b86b-383d056ad102}
+
+
+ {72ae1f15-a094-4184-85f0-3c8b58bb6a0f}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj
new file mode 100644
index 000000000..03900c608
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj
@@ -0,0 +1,334 @@
+
+
+
+
+ debug_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ debug_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_shared
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_md
+ SDK_AM335X_SK_WEC2013_V310
+
+
+ release_static_mt
+ SDK_AM335X_SK_WEC2013_V310
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ en-US
+ 11.0
+ true
+ SDK_AM335X_SK_WEC2013_V310
+ CE800
+
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+ Application
+ Unicode
+ CE800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\shared\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_mt\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ true
+
+
+ bin\$(Platform)\static_md\
+ obj\$(Platform)\$(Configuration)\
+ false
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitd.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\shared\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+ Level3
+ ProgramDatabase
+
+
+ CppUnit.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\shared\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebug
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmtd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_mt\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreaded
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmt.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_mt\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ _DEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDebugDLL
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmdd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\TestSuited.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ true
+ bin\$(Platform)\static_md\TestSuited.pdb
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+ Win32
+
+
+ Disabled
+ Default
+ true
+ Speed
+ ..\include;..\..\CppUnit\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ NDEBUG;POCO_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ false
+ MultiThreadedDLL
+ false
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmd.lib;iphlpapi.lib;ws2.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\$(Platform)\static_md\TestSuite.exe
+ ..\..\lib\$(Platform);%(AdditionalLibraryDirectories)
+ false
+
+ true
+ true
+ wmainCRTStartup
+ WindowsCE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters
new file mode 100644
index 000000000..58a6961ff
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {f17e53ea-4407-422c-91f1-9eddcafcff0e}
+
+
+ {c4064d99-03b4-40cb-b01e-d433eeabe89e}
+
+
+ {961d9056-9f64-4a0b-a2da-5ed564de96b8}
+
+
+ {56bd361e-875b-4ea0-aade-3a618610872e}
+
+
+ {8d682d15-6735-450d-b8e1-89e93ca1cc63}
+
+
+ {223dd841-9788-4744-879a-b1d7573350ca}
+
+
+ {3aad619d-9f31-4e8d-85ed-7253aa62d81e}
+
+
+ {040a0ec0-93ba-4c6a-b554-04070f0fc8f7}
+
+
+ {249d25e6-8338-45ef-aab2-c097e2396b8b}
+
+
+ {b25b6b15-5fbb-4944-bbb4-0b883ba2bae7}
+
+
+ {8886561e-d098-426e-8623-85ed4069d66a}
+
+
+ {8fc72360-8742-433c-bf4c-6f0a69bdbbc9}
+
+
+ {662dfcf8-9801-4a5c-bc13-2e0ae9b17552}
+
+
+ {08c2dd92-aa1f-4495-b9d8-a584243e75b8}
+
+
+ {982fa6dd-e642-4560-8184-906a8dc42e87}
+
+
+ {f29b2438-91db-48bd-b35c-3d0467fdc8d0}
+
+
+ {d49c707b-585c-436c-be52-e7a548196846}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj b/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj
new file mode 100644
index 000000000..a74ee3143
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj
@@ -0,0 +1,339 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Static
+ MultiByte
+
+
+ Application
+ Static
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin\
+ obj\$(Configuration)\
+ true
+ bin\
+ obj\$(Configuration)\
+ false
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitd.lib;WinTestRunnerd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\TestSuited.pdb
+ Windows
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnit.lib;WinTestRunner.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmtd.lib;WinTestRunnermtd.lib;iphlpapi.lib;winmm.lib;nafxcwd.lib;libcmtd.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ nafxcwd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ true
+ bin\static_mt\TestSuited.pdb
+ Windows
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmt.lib;WinTestRunnermt.lib;iphlpapi.lib;winmm.lib;nafxcw.lib;libcmt.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ nafxcw.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ false
+ Windows
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmdd.lib;WinTestRunnermdd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\TestSuited.pdb
+ Windows
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmd.lib;WinTestRunnermd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX86
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj.filters
new file mode 100644
index 000000000..085b3edc7
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs100.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {3d359caf-558b-43fc-b575-36b0cb4f7dd2}
+
+
+ {451d815b-2ced-4a36-9d2e-b6fe441b7a87}
+
+
+ {802d97b4-ea4a-4679-9ec2-1cfdd68ccc99}
+
+
+ {7a34f1cf-6393-4716-8aea-deb8fd70d1c0}
+
+
+ {c96c0e31-4559-47b1-8592-9536e700b5a9}
+
+
+ {0a9343ff-0c3e-4bc7-8d2f-54bcc6e3cab4}
+
+
+ {495c2828-f855-4c07-8a6e-38512e3778f5}
+
+
+ {5cb32a9d-1766-44ae-9a1c-870364b14f76}
+
+
+ {ee66b499-7c14-44c6-9cdf-becffe1697b7}
+
+
+ {a5b51c63-a879-4709-a826-4340e134487e}
+
+
+ {199801e4-9112-4b64-ad9b-47a5a0537b03}
+
+
+ {bdbc69e5-4988-4ab3-8e8e-af6b1f95fd73}
+
+
+ {5cb1be8b-f705-4c4a-b0cc-75ec0ebe07af}
+
+
+ {b34d45bc-b692-468d-87c3-e9af798a375b}
+
+
+ {23d15521-d128-4eb2-99f4-ca1bd234fbd5}
+
+
+ {6a28dbcc-0eae-406a-9bb2-9432fcc3dc15}
+
+
+ {eb0f65ca-51ef-4394-b544-966d28762857}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj b/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj
new file mode 100644
index 000000000..2f3d9d7f9
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj
@@ -0,0 +1,339 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Static
+ MultiByte
+ v110
+
+
+ Application
+ Static
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitd.lib;WinTestRunnerd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\TestSuited.pdb
+ Windows
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnit.lib;WinTestRunner.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitmtd.lib;WinTestRunnermtd.lib;iphlpapi.lib;winmm.lib;nafxcwd.lib;libcmtd.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ nafxcwd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ true
+ bin\static_mt\TestSuited.pdb
+ Windows
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmt.lib;WinTestRunnermt.lib;iphlpapi.lib;winmm.lib;nafxcw.lib;libcmt.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ nafxcw.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ false
+ Windows
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitmdd.lib;WinTestRunnermdd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\TestSuited.pdb
+ Windows
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmd.lib;WinTestRunnermd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj.filters
new file mode 100644
index 000000000..17da63ecf
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs110.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {ad659ee7-cb11-4318-a0e3-8458f19dd491}
+
+
+ {9b0df98f-933c-4a2c-9aeb-19c1aafff930}
+
+
+ {002e20ad-71d9-4edf-8b7e-377a8fb9fa00}
+
+
+ {9241e1b6-3a30-4f52-8be1-01f314135125}
+
+
+ {f18a4cdc-a880-4852-980b-9b2150c29224}
+
+
+ {46fa264b-06eb-4824-857e-adf9b7fd820d}
+
+
+ {004c05fe-02ea-4074-b04b-11eaaeb254ed}
+
+
+ {b8d483c9-ee69-439e-a9e6-bc7e24d7bb6b}
+
+
+ {a7ab3f50-91cc-4a9f-a1a5-c7af72545317}
+
+
+ {8b3cbac3-d086-4f36-b391-774e89289593}
+
+
+ {d77e7da5-91c9-469c-a91c-a2bdbd3e1e1a}
+
+
+ {62598349-6f88-48de-8818-18f2cf9ed2b7}
+
+
+ {1b1e26b2-d5ee-4dc4-be32-ca4162fd3c50}
+
+
+ {70a10f4b-057e-4c51-bccf-2dc3790bdd20}
+
+
+ {ac9beaba-38a3-4c0d-9975-eedbdeae1c53}
+
+
+ {3023f5ef-331b-4047-835f-d8a63741b491}
+
+
+ {1bef3884-8f9c-4c4c-aec7-a2a50c04b64c}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj b/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj
new file mode 100644
index 000000000..b5e8a5700
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj
@@ -0,0 +1,331 @@
+
+
+
+
+ debug_shared
+ Win32
+
+
+ debug_static_md
+ Win32
+
+
+ debug_static_mt
+ Win32
+
+
+ release_shared
+ Win32
+
+
+ release_static_md
+ Win32
+
+
+ release_static_mt
+ Win32
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin\
+ obj\$(Configuration)\
+ true
+
+
+ bin\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_mt\
+ obj\$(Configuration)\
+ false
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ true
+
+
+ bin\static_md\
+ obj\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\TestSuited.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnit.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitmtd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_mt\TestSuited.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmt.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_mt\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ EditAndContinue
+ Default
+
+
+ CppUnitmdd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuited.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin\static_md\TestSuited.pdb
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin\static_md\TestSuite.exe
+ ..\..\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj.filters
new file mode 100644
index 000000000..bde21deb3
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs120.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {db48da57-8019-4180-ba32-1e55f00c62ff}
+
+
+ {17e9d52d-3e2a-42c5-8de1-76f6802797ce}
+
+
+ {ca187113-9c2f-4d70-b315-f78fa3532b84}
+
+
+ {07013709-e79f-4a05-a9ea-1fab7616c0db}
+
+
+ {0b5bbb7f-7848-4938-a5ef-14feaf95d2e6}
+
+
+ {e1b92a56-2d40-4376-948f-d3c3cc1963a6}
+
+
+ {796e18df-826c-42ec-bea7-d079a8dfc3af}
+
+
+ {43d0c37d-44cf-4cd7-b4d8-2ae46076097f}
+
+
+ {c3815f6c-c284-4475-af54-a5c188eb849d}
+
+
+ {bebf412d-8632-4cff-99f3-5558e7ac864d}
+
+
+ {98a96d0c-f52c-4a10-b2e6-d75801fa2453}
+
+
+ {ea4ccbc4-0df5-4c94-93d9-9434b8047d41}
+
+
+ {77936102-fdd0-40ad-82e8-9f5d929c993b}
+
+
+ {47c423e3-4c98-427b-bb88-b0794568d315}
+
+
+ {251921bf-da10-4e33-8376-906923a77164}
+
+
+ {5d9e5222-9d46-4c2a-9509-d1e41e7a5d83}
+
+
+ {af5f3aa7-1919-4fda-ba06-d055b157ee68}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_vs71.vcproj b/NetSSL_Win/testsuite/TestSuite_vs71.vcproj
new file mode 100644
index 000000000..75a0174b6
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs71.vcproj
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_vs80.vcproj b/NetSSL_Win/testsuite/TestSuite_vs80.vcproj
new file mode 100644
index 000000000..43eecf038
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs80.vcproj
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_vs90.vcproj b/NetSSL_Win/testsuite/TestSuite_vs90.vcproj
new file mode 100644
index 000000000..c404b8c45
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_vs90.vcproj
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj b/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj
new file mode 100644
index 000000000..1429a79e1
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj
@@ -0,0 +1,339 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Static
+ MultiByte
+
+
+ Application
+ Static
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+ Application
+ Dynamic
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ bin64\
+ obj64\$(Configuration)\
+ true
+ bin64\
+ obj64\$(Configuration)\
+ false
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitd.lib;WinTestRunnerd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\TestSuited.pdb
+ Windows
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnit.lib;WinTestRunner.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmtd.lib;WinTestRunnermtd.lib;iphlpapi.lib;winmm.lib;nafxcwd.lib;libcmtd.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ nafxcwd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ true
+ bin64\static_mt\TestSuited.pdb
+ Windows
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmt.lib;WinTestRunnermt.lib;iphlpapi.lib;winmm.lib;nafxcw.lib;libcmt.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ nafxcw.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ false
+ Windows
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmdd.lib;WinTestRunnermdd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\TestSuited.pdb
+ Windows
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+ %(DisableSpecificWarnings)
+ %(AdditionalOptions)
+
+
+ CppUnitmd.lib;WinTestRunnermd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX64
+ %(AdditionalOptions)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj.filters
new file mode 100644
index 000000000..85a7140db
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs100.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {17d85dae-d74f-4108-bd24-b156060bb638}
+
+
+ {5163dde6-bda6-4286-82ea-185c367388ea}
+
+
+ {fbf90b6f-e58b-4e38-9117-e89c1ced0ad1}
+
+
+ {fd645104-3ad4-4275-9515-d54cb4073ee8}
+
+
+ {f20e2621-aede-4ff8-ab0e-5cd69c07bda8}
+
+
+ {3b0d5b54-13c1-4939-b369-b062e473a2c7}
+
+
+ {3f35cf42-0919-450b-a326-a7705f2f5c17}
+
+
+ {3fb31fca-2afe-4e2b-88ef-d8406b8f555c}
+
+
+ {714fc73c-ca57-4808-bbc6-df776fe23299}
+
+
+ {616bff57-a614-462c-83aa-5c29e5fbf1d2}
+
+
+ {9e768f0a-70a2-46ba-ba41-b9752878f06a}
+
+
+ {56e5fd0e-48d8-4f1e-bba9-974e7d616d07}
+
+
+ {2bc094b9-060b-40b5-b289-6cf131634452}
+
+
+ {bd372c04-ed51-4fe2-982c-e85ef78e130d}
+
+
+ {bb0ec027-017f-4b21-acb7-54e8cd8198b2}
+
+
+ {9ca300c6-b499-40d8-96ff-b8a0ca8fc785}
+
+
+ {0359c41d-22df-4891-be7d-55286546cc7d}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj b/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj
new file mode 100644
index 000000000..fd399dbb8
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj
@@ -0,0 +1,339 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Static
+ MultiByte
+ v110
+
+
+ Application
+ Static
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+ Application
+ Dynamic
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>11.0.61030.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitd.lib;WinTestRunnerd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\TestSuited.pdb
+ Windows
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnit.lib;WinTestRunner.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmtd.lib;WinTestRunnermtd.lib;iphlpapi.lib;winmm.lib;nafxcwd.lib;libcmtd.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ nafxcwd.lib;libcmtd.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ true
+ bin64\static_mt\TestSuited.pdb
+ Windows
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmt.lib;WinTestRunnermt.lib;iphlpapi.lib;winmm.lib;nafxcw.lib;libcmt.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ nafxcw.lib;libcmt.lib;%(IgnoreSpecificDefaultLibraries)
+ false
+ Windows
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmdd.lib;WinTestRunnermdd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\TestSuited.pdb
+ Windows
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmd.lib;WinTestRunnermd.lib;iphlpapi.lib;winmm.lib;WinTestRunner.res;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Windows
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj.filters
new file mode 100644
index 000000000..1a322b60b
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs110.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {2e7b60a0-7daa-4f52-8b25-6cd602bb15ec}
+
+
+ {e9f2a57a-b40e-4ef1-b720-b91ca830d397}
+
+
+ {f71c0126-0243-4158-9fac-a281e96248dc}
+
+
+ {fa2fae90-dbb4-44f6-bd13-892ee3f837a1}
+
+
+ {3ebfe64f-8ff8-481f-abee-e83a4f3e5ad7}
+
+
+ {f11c6220-b0fe-442a-b213-d3b2ba605b1e}
+
+
+ {7320546b-8fd3-48e9-be3d-4a7cae820594}
+
+
+ {2f4565dd-28ac-4ed9-840f-342a73fd085a}
+
+
+ {e7368db8-f015-4af9-8afd-066dcf0f5015}
+
+
+ {73e5bb6f-9dcd-4355-883b-f0e858fd77cb}
+
+
+ {8783a216-4768-49b8-94c9-ee94ae3326bf}
+
+
+ {d3431762-32f4-46b8-9ef4-048cfd933a5d}
+
+
+ {e34b4732-a5ba-4dda-8d95-e833d7ba12b6}
+
+
+ {4d7285d9-a146-4b78-aec6-4a1f8a211f1a}
+
+
+ {b0f36de1-20a2-46ad-89f7-670d54cfa71a}
+
+
+ {654d697c-bcbc-41dc-9541-3735b444d6be}
+
+
+ {018a98ee-70fe-47ed-a941-dd3c3a46035f}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj b/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj
new file mode 100644
index 000000000..03783c9c4
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj
@@ -0,0 +1,331 @@
+
+
+
+
+ debug_shared
+ x64
+
+
+ debug_static_md
+ x64
+
+
+ debug_static_mt
+ x64
+
+
+ release_shared
+ x64
+
+
+ release_static_md
+ x64
+
+
+ release_static_mt
+ x64
+
+
+
+ TestSuite
+ {25E8E5AB-7B9C-4A2F-A0F6-12B6C5B11F28}
+ TestSuite
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+ Application
+ MultiByte
+ v120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+ TestSuited
+ TestSuited
+ TestSuited
+ TestSuite
+ TestSuite
+ TestSuite
+
+
+ bin64\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_mt\
+ obj64\$(Configuration)\
+ false
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ true
+
+
+ bin64\static_md\
+ obj64\$(Configuration)\
+ false
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitd.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\TestSuited.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnit.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmtd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_mt\TestSuited.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreaded
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmt.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_mt\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+ Disabled
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+ true
+ true
+ true
+
+ Level3
+ ProgramDatabase
+ Default
+
+
+ CppUnitmdd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuited.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ true
+ true
+ bin64\static_md\TestSuited.pdb
+ Console
+ MachineX64
+
+
+
+
+ Disabled
+ OnlyExplicitInline
+ true
+ Speed
+ true
+ ..\include;..\..\CppUnit\include;..\..\CppUnit\WinTestRunner\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;WINVER=0x0600;POCO_STATIC;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+ false
+ true
+ true
+ true
+
+ Level3
+
+ Default
+
+
+ CppUnitmd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;Crypt32.lib;%(AdditionalDependencies)
+ bin64\static_md\TestSuite.exe
+ ..\..\lib64;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj.filters b/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj.filters
new file mode 100644
index 000000000..fc472d9dc
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs120.vcxproj.filters
@@ -0,0 +1,117 @@
+
+
+
+
+ {7f32cbff-f469-4e44-8fe7-80a39f80054f}
+
+
+ {56a15372-7768-4699-ab19-4df52485b11c}
+
+
+ {317c3bb2-0a6f-4233-a060-5d08acafe144}
+
+
+ {6e44df5b-4b10-45a8-ac51-68430cf8a753}
+
+
+ {59a1343e-9e87-4760-9711-3c7a26abe1e8}
+
+
+ {31fe010d-8cd4-469d-9f8c-9c1d85a0ce59}
+
+
+ {e62cd358-7608-4881-a07b-bcf0b109deed}
+
+
+ {840e0563-2f44-4aed-8ca4-0c36752de211}
+
+
+ {64892a5b-8283-47a0-8d05-ff8e4f306c7b}
+
+
+ {2451654a-25e4-4b11-8231-81725d41fbb0}
+
+
+ {19753529-634b-4721-89fc-aa2648a90774}
+
+
+ {96d013d3-71dc-432c-b7ff-432c818b742b}
+
+
+ {48a7b213-b697-4b66-bbc2-1f97e44e5df1}
+
+
+ {a42cb6f5-84b3-47ef-8fce-4192382d7367}
+
+
+ {2a355eb1-1f4e-4c61-937a-7b835155a6a0}
+
+
+ {657be179-2167-4000-adb2-6180ecd49828}
+
+
+ {94440611-c09b-4f86-9b5f-583407c8e950}
+
+
+
+
+ HTTPS\Header Files
+
+
+ _Suite\Header Files
+
+
+ TCPServer\Header Files
+
+
+ TCPServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSServer\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+ HTTPSClient\Header Files
+
+
+
+
+ HTTPS\Source Files
+
+
+ _Suite\Source Files
+
+
+ _Driver\Source Files
+
+
+ TCPServer\Source Files
+
+
+ TCPServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSServer\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+ HTTPSClient\Source Files
+
+
+
\ No newline at end of file
diff --git a/NetSSL_Win/testsuite/TestSuite_x64_vs90.vcproj b/NetSSL_Win/testsuite/TestSuite_x64_vs90.vcproj
new file mode 100644
index 000000000..473d7737d
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuite_x64_vs90.vcproj
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetSSL_Win/testsuite/TestSuitemt.xml b/NetSSL_Win/testsuite/TestSuitemt.xml
new file mode 100644
index 000000000..2c03eb7be
--- /dev/null
+++ b/NetSSL_Win/testsuite/TestSuitemt.xml
@@ -0,0 +1,29 @@
+
+
+
+ ${system.nodeName}
+ none
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+ relaxed
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+
+
+ proxy.aon.at
+ 8080
+
+
+
diff --git a/NetSSL_Win/testsuite/src/Driver.cpp b/NetSSL_Win/testsuite/src/Driver.cpp
new file mode 100644
index 000000000..9a497e4ad
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/Driver.cpp
@@ -0,0 +1,77 @@
+//
+// Driver.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/Driver.cpp#1 $
+//
+// Console-based test driver for Poco NetSSL.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "CppUnit/TestRunner.h"
+#include "NetSSLTestSuite.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Net/HTTPStreamFactory.h"
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include
+
+
+class NetSSLApp: public Poco::Util::Application
+{
+public:
+ NetSSLApp()
+ {
+ Poco::Net::initializeSSL();
+ Poco::Net::HTTPStreamFactory::registerFactory();
+ Poco::Net::HTTPSStreamFactory::registerFactory();
+ }
+
+ ~NetSSLApp()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+
+ int main(const std::vector& args)
+ {
+ CppUnit::TestRunner runner;
+ runner.addTest("NetSSLTestSuite", NetSSLTestSuite::suite());
+ return runner.run(_targs) ? 0 : 1;
+ }
+
+ void setup(int argc, char** argv)
+ {
+ init(1, argv);
+ for (int i = 0; i < argc; ++i)
+ _targs.push_back(std::string(argv[i]));
+ }
+
+protected:
+ void initialize(Poco::Util::Application& self)
+ {
+ loadConfiguration(); // load default configuration files, if present
+ Poco::Util::Application::initialize(self);
+ }
+
+private:
+ std::vector _targs;
+};
+
+
+int main(int ac, char **av)
+{
+ NetSSLApp app;
+ try
+ {
+ app.setup(ac, av);
+ return app.run();
+ }
+ catch (Poco::Exception& exc)
+ {
+ std::cout << exc.displayText() << std::endl;
+ return 1;
+ }
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.cpp b/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.cpp
new file mode 100644
index 000000000..230062ffa
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.cpp
@@ -0,0 +1,433 @@
+//
+// HTTPSClientSessionTest.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.cpp#2 $
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSClientSessionTest.h"
+#include "CppUnit/TestCaller.h"
+#include "CppUnit/TestSuite.h"
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPRequestHandler.h"
+#include "Poco/Net/HTTPRequestHandlerFactory.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/HTTPServer.h"
+#include "Poco/Net/HTTPServerResponse.h"
+#include "Poco/Net/HTTPServerRequest.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Session.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/AbstractConfiguration.h"
+#include "Poco/StreamCopier.h"
+#include "Poco/Exception.h"
+#include "Poco/DateTimeFormatter.h"
+#include "Poco/DateTimeFormat.h"
+#include "Poco/Thread.h"
+#include "HTTPSTestServer.h"
+#include
+#include
+#include
+
+
+using namespace Poco::Net;
+using Poco::Util::Application;
+using Poco::StreamCopier;
+using Poco::Thread;
+
+
+class TestRequestHandler: public HTTPRequestHandler
+ /// Return a HTML document with the current date and time.
+{
+public:
+ TestRequestHandler()
+ {
+ }
+
+ void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
+ {
+ response.setChunkedTransferEncoding(true);
+ response.setContentType(request.getContentType());
+ std::ostream& ostr = response.send();
+ Poco::StreamCopier::copyStream(request.stream(), ostr);
+ }
+
+};
+
+
+class TestRequestHandlerFactory: public HTTPRequestHandlerFactory
+{
+public:
+ TestRequestHandlerFactory()
+ {
+ }
+
+ HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
+ {
+ return new TestRequestHandler();
+ }
+};
+
+
+HTTPSClientSessionTest::HTTPSClientSessionTest(const std::string& name): CppUnit::TestCase(name)
+{
+}
+
+
+HTTPSClientSessionTest::~HTTPSClientSessionTest()
+{
+}
+
+
+void HTTPSClientSessionTest::testGetSmall()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
+ s.sendRequest(request);
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response.getContentType() == "text/plain");
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == HTTPSTestServer::SMALL_BODY);
+}
+
+
+void HTTPSClientSessionTest::testGetLarge()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
+ s.sendRequest(request);
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length());
+ assert (response.getContentType() == "text/plain");
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == HTTPSTestServer::LARGE_BODY);
+}
+
+
+void HTTPSClientSessionTest::testHead()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
+ s.sendRequest(request);
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length());
+ assert (response.getContentType() == "text/plain");
+ std::ostringstream ostr;
+ assert (StreamCopier::copyStream(rs, ostr) == 0);
+}
+
+
+void HTTPSClientSessionTest::testPostSmallIdentity()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
+ std::string body("this is a random request body\r\n0\r\n");
+ request.setContentLength((int) body.length());
+ s.sendRequest(request) << body;
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getContentLength() == body.length());
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == body);
+}
+
+
+void HTTPSClientSessionTest::testPostLargeIdentity()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
+ std::string body(8000, 'x');
+ body.append("\r\n0\r\n");
+ request.setContentLength((int) body.length());
+ s.sendRequest(request) << body;
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getContentLength() == body.length());
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == body);
+}
+
+
+void HTTPSClientSessionTest::testPostSmallChunked()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
+ std::string body("this is a random request body");
+ request.setChunkedTransferEncoding(true);
+ s.sendRequest(request) << body;
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getChunkedTransferEncoding());
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == body);
+}
+
+
+void HTTPSClientSessionTest::testPostLargeChunked()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
+ std::string body(16000, 'x');
+ request.setChunkedTransferEncoding(true);
+ s.sendRequest(request) << body;
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getChunkedTransferEncoding());
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == body);
+}
+
+
+void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive()
+{
+ SecureServerSocket svs(32322);
+ HTTPServer srv(new TestRequestHandlerFactory(), svs, new HTTPServerParams());
+ srv.start();
+ try
+ {
+ HTTPSClientSession s("localhost", srv.port());
+ s.setKeepAlive(true);
+ for (int i = 0; i < 10; ++i)
+ {
+ HTTPRequest request(HTTPRequest::HTTP_POST, "/keepAlive", HTTPMessage::HTTP_1_1);
+ std::string body(16000, 'x');
+ request.setChunkedTransferEncoding(true);
+ s.sendRequest(request) << body;
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ assert (response.getChunkedTransferEncoding());
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ assert (ostr.str() == body);
+ }
+ srv.stop();
+ }
+ catch (...)
+ {
+ srv.stop();
+ throw;
+ }
+}
+
+
+void HTTPSClientSessionTest::testKeepAlive()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("localhost", srv.port());
+ s.setKeepAlive(true);
+ HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
+ s.sendRequest(request);
+ HTTPResponse response;
+ std::istream& rs1 = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response.getContentType() == "text/plain");
+ assert (response.getKeepAlive());
+ std::ostringstream ostr1;
+ assert (StreamCopier::copyStream(rs1, ostr1) == 0);
+
+ request.setMethod(HTTPRequest::HTTP_GET);
+ request.setURI("/small");
+ s.sendRequest(request);
+ std::istream& rs2 = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response.getKeepAlive());
+ std::ostringstream ostr2;
+ StreamCopier::copyStream(rs2, ostr2);
+ assert (ostr2.str() == HTTPSTestServer::SMALL_BODY);
+
+ request.setMethod(HTTPRequest::HTTP_GET);
+ request.setURI("/large");
+ s.sendRequest(request);
+ std::istream& rs3 = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ assert (response.getChunkedTransferEncoding());
+ assert (response.getKeepAlive());
+ std::ostringstream ostr3;
+ StreamCopier::copyStream(rs3, ostr3);
+ assert (ostr3.str() == HTTPSTestServer::LARGE_BODY);
+
+ request.setMethod(HTTPRequest::HTTP_HEAD);
+ request.setURI("/large");
+ s.sendRequest(request);
+ std::istream& rs4 = s.receiveResponse(response);
+ assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length());
+ assert (response.getContentType() == "text/plain");
+ assert (!response.getKeepAlive());
+ std::ostringstream ostr4;
+ assert (StreamCopier::copyStream(rs4, ostr4) == 0);
+}
+
+
+void HTTPSClientSessionTest::testInterop()
+{
+ HTTPSClientSession s("secure.appinf.com");
+ HTTPRequest request(HTTPRequest::HTTP_GET, "/public/poco/NetSSL.txt");
+ s.sendRequest(request);
+ Poco::Net::X509Certificate cert = s.serverCertificate();
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ std::string str(ostr.str());
+ assert (str == "This is a test file for NetSSL.\n");
+ assert (cert.commonName() == "secure.appinf.com" || cert.commonName() == "*.appinf.com");
+}
+
+
+void HTTPSClientSessionTest::testProxy()
+{
+ HTTPSTestServer srv;
+ HTTPSClientSession s("secure.appinf.com");
+ s.setProxy(
+ Application::instance().config().getString("testsuite.proxy.host"),
+ Application::instance().config().getInt("testsuite.proxy.port")
+ );
+ HTTPRequest request(HTTPRequest::HTTP_GET, "/public/poco/NetSSL.txt");
+ s.sendRequest(request);
+ Poco::Net::X509Certificate cert = s.serverCertificate();
+ HTTPResponse response;
+ std::istream& rs = s.receiveResponse(response);
+ std::ostringstream ostr;
+ StreamCopier::copyStream(rs, ostr);
+ std::string str(ostr.str());
+ assert (str == "This is a test file for NetSSL.\n");
+ assert (cert.commonName() == "secure.appinf.com" || cert.commonName() == "*.appinf.com");
+}
+
+
+void HTTPSClientSessionTest::testCachedSession()
+{
+ // ensure OpenSSL machinery is fully setup
+ Context::Ptr pDefaultServerContext = SSLManager::instance().defaultServerContext();
+ Context::Ptr pDefaultClientContext = SSLManager::instance().defaultClientContext();
+
+ Context::Ptr pServerContext = new Context(
+ Context::SERVER_USE,
+ "");
+ //pServerContext->enableSessionCache(true, "TestSuite");
+ //pServerContext->setSessionTimeout(10);
+ //pServerContext->setSessionCacheSize(1000);
+ //pServerContext->disableStatelessSessionResumption();
+
+ HTTPSTestServer srv(pServerContext);
+
+ Context::Ptr pClientContext = new Context(
+ Context::CLIENT_USE,
+ "");
+ //pClientContext->enableSessionCache(true);
+
+ HTTPSClientSession s1("localhost", srv.port(), pClientContext);
+ HTTPRequest request1(HTTPRequest::HTTP_GET, "/small");
+ s1.sendRequest(request1);
+ Session::Ptr pSession1 = s1.sslSession();
+ HTTPResponse response1;
+ std::istream& rs1 = s1.receiveResponse(response1);
+ assert (response1.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response1.getContentType() == "text/plain");
+ std::ostringstream ostr1;
+ StreamCopier::copyStream(rs1, ostr1);
+ assert (ostr1.str() == HTTPSTestServer::SMALL_BODY);
+
+ HTTPSClientSession s2("localhost", srv.port(), pClientContext, pSession1);
+ HTTPRequest request2(HTTPRequest::HTTP_GET, "/small");
+ s2.sendRequest(request2);
+ Session::Ptr pSession2 = s2.sslSession();
+ HTTPResponse response2;
+ std::istream& rs2 = s2.receiveResponse(response2);
+ assert (response2.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response2.getContentType() == "text/plain");
+ std::ostringstream ostr2;
+ StreamCopier::copyStream(rs2, ostr2);
+ assert (ostr2.str() == HTTPSTestServer::SMALL_BODY);
+
+ assert (pSession1 == pSession2);
+
+ HTTPRequest request3(HTTPRequest::HTTP_GET, "/small");
+ s2.sendRequest(request3);
+ Session::Ptr pSession3 = s2.sslSession();
+ HTTPResponse response3;
+ std::istream& rs3 = s2.receiveResponse(response3);
+ assert (response3.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response3.getContentType() == "text/plain");
+ std::ostringstream ostr3;
+ StreamCopier::copyStream(rs3, ostr3);
+ assert (ostr3.str() == HTTPSTestServer::SMALL_BODY);
+
+ assert (pSession1 == pSession3);
+
+ Thread::sleep(15000); // wait for session to expire
+ //pServerContext->flushSessionCache();
+
+ HTTPRequest request4(HTTPRequest::HTTP_GET, "/small");
+ s2.sendRequest(request4);
+ Session::Ptr pSession4 = s2.sslSession();
+ HTTPResponse response4;
+ std::istream& rs4 = s2.receiveResponse(response4);
+ assert (response4.getContentLength() == HTTPSTestServer::SMALL_BODY.length());
+ assert (response4.getContentType() == "text/plain");
+ std::ostringstream ostr4;
+ StreamCopier::copyStream(rs4, ostr4);
+ assert (ostr4.str() == HTTPSTestServer::SMALL_BODY);
+
+ assert (pSession1 != pSession4);
+}
+
+
+void HTTPSClientSessionTest::setUp()
+{
+}
+
+
+void HTTPSClientSessionTest::tearDown()
+{
+}
+
+
+CppUnit::Test* HTTPSClientSessionTest::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSClientSessionTest");
+
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testGetSmall);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testGetLarge);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testHead);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostSmallIdentity);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeIdentity);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostSmallChunked);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeChunked);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeChunkedKeepAlive);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testKeepAlive);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testInterop);
+ CppUnit_addTest(pSuite, HTTPSClientSessionTest, testProxy);
+ //CppUnit_addTest(pSuite, HTTPSClientSessionTest, testCachedSession);
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.h b/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.h
new file mode 100644
index 000000000..fee50dcb2
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.h
@@ -0,0 +1,51 @@
+//
+// HTTPSClientSessionTest.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSClientSessionTest.h#1 $
+//
+// Definition of the HTTPSClientSessionTest class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSClientSessionTest_INCLUDED
+#define HTTPSClientSessionTest_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "CppUnit/TestCase.h"
+
+
+class HTTPSClientSessionTest: public CppUnit::TestCase
+{
+public:
+ HTTPSClientSessionTest(const std::string& name);
+ ~HTTPSClientSessionTest();
+
+ void testGetSmall();
+ void testGetLarge();
+ void testHead();
+ void testPostSmallIdentity();
+ void testPostLargeIdentity();
+ void testPostSmallChunked();
+ void testPostLargeChunked();
+ void testPostLargeChunkedKeepAlive();
+ void testKeepAlive();
+ void testInterop();
+ void testProxy();
+ void testCachedSession();
+
+ void setUp();
+ void tearDown();
+
+ static CppUnit::Test* suite();
+
+private:
+};
+
+
+#endif // HTTPSClientSessionTest_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.cpp b/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.cpp
new file mode 100644
index 000000000..2728b41e8
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.cpp
@@ -0,0 +1,26 @@
+//
+// HTTPSClientTestSuite.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSClientTestSuite.h"
+#include "HTTPSClientSessionTest.h"
+#include "HTTPSStreamFactoryTest.h"
+
+
+CppUnit::Test* HTTPSClientTestSuite::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSClientTestSuite");
+
+ pSuite->addTest(HTTPSClientSessionTest::suite());
+ pSuite->addTest(HTTPSStreamFactoryTest::suite());
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.h b/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.h
new file mode 100644
index 000000000..dd83f9032
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.h
@@ -0,0 +1,29 @@
+//
+// HTTPSClientTestSuite.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSClientTestSuite.h#1 $
+//
+// Definition of the HTTPSClientTestSuite class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSClientTestSuite_INCLUDED
+#define HTTPSClientTestSuite_INCLUDED
+
+
+#include "CppUnit/TestSuite.h"
+
+
+class HTTPSClientTestSuite
+{
+public:
+ static CppUnit::Test* suite();
+};
+
+
+#endif // HTTPSClientTestSuite_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/HTTPSServerTest.cpp b/NetSSL_Win/testsuite/src/HTTPSServerTest.cpp
new file mode 100644
index 000000000..8ccf04948
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSServerTest.cpp
@@ -0,0 +1,351 @@
+//
+// HTTPSServerTest.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSServerTest.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSServerTest.h"
+#include "CppUnit/TestCaller.h"
+#include "CppUnit/TestSuite.h"
+#include "Poco/Net/HTTPServer.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/HTTPRequestHandler.h"
+#include "Poco/Net/HTTPRequestHandlerFactory.h"
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPServerRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/HTTPServerResponse.h"
+#include "Poco/Net/SecureServerSocket.h"
+#include "Poco/StreamCopier.h"
+#include
+
+
+using Poco::Net::HTTPServer;
+using Poco::Net::HTTPServerParams;
+using Poco::Net::HTTPRequestHandler;
+using Poco::Net::HTTPRequestHandlerFactory;
+using Poco::Net::HTTPSClientSession;
+using Poco::Net::HTTPRequest;
+using Poco::Net::HTTPServerRequest;
+using Poco::Net::HTTPResponse;
+using Poco::Net::HTTPServerResponse;
+using Poco::Net::HTTPMessage;
+using Poco::Net::SecureServerSocket;
+using Poco::StreamCopier;
+
+
+namespace
+{
+ class EchoBodyRequestHandler: public HTTPRequestHandler
+ {
+ public:
+ void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
+ {
+ if (request.getChunkedTransferEncoding())
+ response.setChunkedTransferEncoding(true);
+ else if (request.getContentLength() != HTTPMessage::UNKNOWN_CONTENT_LENGTH)
+ response.setContentLength(request.getContentLength());
+
+ response.setContentType(request.getContentType());
+
+ std::istream& istr = request.stream();
+ std::ostream& ostr = response.send();
+ StreamCopier::copyStream(istr, ostr);
+ }
+ };
+
+ class EchoHeaderRequestHandler: public HTTPRequestHandler
+ {
+ public:
+ void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
+ {
+ std::ostringstream osstr;
+ request.write(osstr);
+ int n = (int) osstr.str().length();
+ response.setContentLength(n);
+ std::ostream& ostr = response.send();
+ if (request.getMethod() != HTTPRequest::HTTP_HEAD)
+ request.write(ostr);
+ }
+ };
+
+ class RedirectRequestHandler: public HTTPRequestHandler
+ {
+ public:
+ void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
+ {
+ response.redirect("http://www.appinf.com/");
+ }
+ };
+
+ class AuthRequestHandler: public HTTPRequestHandler
+ {
+ public:
+ void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
+ {
+ response.requireAuthentication("/auth");
+ response.send();
+ }
+ };
+
+ class RequestHandlerFactory: public HTTPRequestHandlerFactory
+ {
+ public:
+ HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
+ {
+ if (request.getURI() == "/echoBody")
+ return new EchoBodyRequestHandler;
+ else if (request.getURI() == "/echoHeader")
+ return new EchoHeaderRequestHandler;
+ else if (request.getURI() == "/redirect")
+ return new RedirectRequestHandler();
+ else if (request.getURI() == "/auth")
+ return new AuthRequestHandler();
+ else
+ return 0;
+ }
+ };
+}
+
+
+HTTPSServerTest::HTTPSServerTest(const std::string& name): CppUnit::TestCase(name)
+{
+}
+
+
+HTTPSServerTest::~HTTPSServerTest()
+{
+}
+
+
+void HTTPSServerTest::testIdentityRequest()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ std::string body(5000, 'x');
+ HTTPRequest request("POST", "/echoBody");
+ request.setContentLength((int) body.length());
+ request.setContentType("text/plain");
+ cs.sendRequest(request) << body;
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == body.size());
+ assert (response.getContentType() == "text/plain");
+ assert (rbody == body);
+}
+
+
+void HTTPSServerTest::testChunkedRequest()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ std::string body(5000, 'x');
+ HTTPRequest request("POST", "/echoBody");
+ request.setContentType("text/plain");
+ request.setChunkedTransferEncoding(true);
+ cs.sendRequest(request) << body;
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ assert (response.getContentType() == "text/plain");
+ assert (response.getChunkedTransferEncoding());
+ assert (rbody == body);
+}
+
+
+void HTTPSServerTest::testIdentityRequestKeepAlive()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(true);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ cs.setKeepAlive(true);
+ std::string body(5000, 'x');
+ HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
+ request.setContentLength((int) body.length());
+ request.setContentType("text/plain");
+ cs.sendRequest(request) << body;
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == body.size());
+ assert (response.getContentType() == "text/plain");
+ assert (response.getKeepAlive());
+ assert (rbody == body);
+
+ body.assign(1000, 'y');
+ request.setContentLength((int) body.length());
+ request.setKeepAlive(false);
+ cs.sendRequest(request) << body;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == body.size());
+ assert (response.getContentType() == "text/plain");
+ assert (!response.getKeepAlive());
+ assert (rbody == body);}
+
+
+void HTTPSServerTest::testChunkedRequestKeepAlive()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(true);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ cs.setKeepAlive(true);
+ std::string body(5000, 'x');
+ HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
+ request.setContentType("text/plain");
+ request.setChunkedTransferEncoding(true);
+ cs.sendRequest(request) << body;
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ assert (response.getContentType() == "text/plain");
+ assert (response.getChunkedTransferEncoding());
+ assert (rbody == body);
+
+ body.assign(1000, 'y');
+ request.setKeepAlive(false);
+ cs.sendRequest(request) << body;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH);
+ assert (response.getContentType() == "text/plain");
+ assert (response.getChunkedTransferEncoding());
+ assert (!response.getKeepAlive());
+ assert (rbody == body);
+}
+
+
+void HTTPSServerTest::test100Continue()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ std::string body(5000, 'x');
+ HTTPRequest request("POST", "/echoBody");
+ request.setContentLength((int) body.length());
+ request.setContentType("text/plain");
+ request.set("Expect", "100-Continue");
+ cs.sendRequest(request) << body;
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getContentLength() == body.size());
+ assert (response.getContentType() == "text/plain");
+ assert (rbody == body);
+}
+
+
+void HTTPSServerTest::testRedirect()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ HTTPRequest request("GET", "/redirect");
+ cs.sendRequest(request);
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getStatus() == HTTPResponse::HTTP_FOUND);
+ assert (response.get("Location") == "http://www.appinf.com/");
+ assert (rbody.empty());
+}
+
+
+void HTTPSServerTest::testAuth()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ HTTPRequest request("GET", "/auth");
+ cs.sendRequest(request);
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED);
+ assert (response.get("WWW-Authenticate") == "Basic realm=\"/auth\"");
+ assert (rbody.empty());
+}
+
+
+void HTTPSServerTest::testNotImpl()
+{
+ SecureServerSocket svs(0);
+ HTTPServerParams* pParams = new HTTPServerParams;
+ pParams->setKeepAlive(false);
+ HTTPServer srv(new RequestHandlerFactory, svs, pParams);
+ srv.start();
+
+ HTTPSClientSession cs("localhost", svs.address().port());
+ HTTPRequest request("GET", "/notImpl");
+ cs.sendRequest(request);
+ HTTPResponse response;
+ std::string rbody;
+ cs.receiveResponse(response) >> rbody;
+ assert (response.getStatus() == HTTPResponse::HTTP_NOT_IMPLEMENTED);
+ assert (rbody.empty());
+}
+
+
+void HTTPSServerTest::setUp()
+{
+}
+
+
+void HTTPSServerTest::tearDown()
+{
+}
+
+
+CppUnit::Test* HTTPSServerTest::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSServerTest");
+
+ CppUnit_addTest(pSuite, HTTPSServerTest, testIdentityRequest);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testChunkedRequest);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testIdentityRequestKeepAlive);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testChunkedRequestKeepAlive);
+ CppUnit_addTest(pSuite, HTTPSServerTest, test100Continue);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testRedirect);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testAuth);
+ CppUnit_addTest(pSuite, HTTPSServerTest, testNotImpl);
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSServerTest.h b/NetSSL_Win/testsuite/src/HTTPSServerTest.h
new file mode 100644
index 000000000..9ba28c2c7
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSServerTest.h
@@ -0,0 +1,47 @@
+//
+// HTTPSServerTest.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSServerTest.h#1 $
+//
+// Definition of the HTTPSServerTest class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSServerTest_INCLUDED
+#define HTTPSServerTest_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "CppUnit/TestCase.h"
+
+
+class HTTPSServerTest: public CppUnit::TestCase
+{
+public:
+ HTTPSServerTest(const std::string& name);
+ ~HTTPSServerTest();
+
+ void testIdentityRequest();
+ void testChunkedRequest();
+ void testIdentityRequestKeepAlive();
+ void testChunkedRequestKeepAlive();
+ void test100Continue();
+ void testRedirect();
+ void testAuth();
+ void testNotImpl();
+
+ void setUp();
+ void tearDown();
+
+ static CppUnit::Test* suite();
+
+private:
+};
+
+
+#endif // HTTPSServerTest_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.cpp b/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.cpp
new file mode 100644
index 000000000..be84e9838
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.cpp
@@ -0,0 +1,24 @@
+//
+// HTTPSServerTestSuite.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSServerTestSuite.h"
+#include "HTTPSServerTest.h"
+
+
+CppUnit::Test* HTTPSServerTestSuite::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSServerTestSuite");
+
+ pSuite->addTest(HTTPSServerTest::suite());
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.h b/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.h
new file mode 100644
index 000000000..e16548843
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.h
@@ -0,0 +1,29 @@
+//
+// HTTPSServerTestSuite.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSServerTestSuite.h#1 $
+//
+// Definition of the HTTPSServerTestSuite class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSServerTestSuite_INCLUDED
+#define HTTPSServerTestSuite_INCLUDED
+
+
+#include "CppUnit/TestSuite.h"
+
+
+class HTTPSServerTestSuite
+{
+public:
+ static CppUnit::Test* suite();
+};
+
+
+#endif // HTTPSServerTestSuite_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.cpp b/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.cpp
new file mode 100644
index 000000000..6357eacfc
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.cpp
@@ -0,0 +1,139 @@
+//
+// HTTPSStreamFactoryTest.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSStreamFactoryTest.h"
+#include "CppUnit/TestCaller.h"
+#include "CppUnit/TestSuite.h"
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/AbstractConfiguration.h"
+#include "Poco/URI.h"
+#include "Poco/Exception.h"
+#include "Poco/StreamCopier.h"
+#include "HTTPSTestServer.h"
+#include
+#include
+
+
+using Poco::Net::HTTPSStreamFactory;
+using Poco::Net::NetException;
+using Poco::Net::HTTPException;
+using Poco::Util::Application;
+using Poco::URI;
+using Poco::StreamCopier;
+
+
+HTTPSStreamFactoryTest::HTTPSStreamFactoryTest(const std::string& name): CppUnit::TestCase(name)
+{
+}
+
+
+HTTPSStreamFactoryTest::~HTTPSStreamFactoryTest()
+{
+}
+
+
+void HTTPSStreamFactoryTest::testNoRedirect()
+{
+ HTTPSTestServer server;
+ HTTPSStreamFactory factory;
+ URI uri("https://localhost/large");
+ uri.setPort(server.port());
+ std::auto_ptr pStr(factory.open(uri));
+ std::ostringstream ostr;
+ StreamCopier::copyStream(*pStr.get(), ostr);
+ assert (ostr.str() == HTTPSTestServer::LARGE_BODY);
+}
+
+
+void HTTPSStreamFactoryTest::testEmptyPath()
+{
+ HTTPSTestServer server;
+ HTTPSStreamFactory factory;
+ URI uri("https://localhost");
+ uri.setPort(server.port());
+ std::auto_ptr pStr(factory.open(uri));
+ std::ostringstream ostr;
+ StreamCopier::copyStream(*pStr.get(), ostr);
+ assert (ostr.str() == HTTPSTestServer::SMALL_BODY);
+}
+
+
+void HTTPSStreamFactoryTest::testRedirect()
+{
+ HTTPSTestServer server;
+ HTTPSStreamFactory factory;
+ URI uri("https://localhost/redirect");
+ uri.setPort(server.port());
+ std::auto_ptr pStr(factory.open(uri));
+ std::ostringstream ostr;
+ StreamCopier::copyStream(*pStr.get(), ostr);
+ assert (ostr.str() == HTTPSTestServer::LARGE_BODY);
+}
+
+
+void HTTPSStreamFactoryTest::testProxy()
+{
+ HTTPSTestServer server;
+ HTTPSStreamFactory factory(
+ Application::instance().config().getString("testsuite.proxy.host"),
+ Application::instance().config().getInt("testsuite.proxy.port")
+ );
+ URI uri("https://secure.appinf.com/public/poco/NetSSL.txt");
+ std::auto_ptr pStr(factory.open(uri));
+ std::ostringstream ostr;
+ StreamCopier::copyStream(*pStr.get(), ostr);
+ assert (ostr.str().length() > 0);
+}
+
+
+void HTTPSStreamFactoryTest::testError()
+{
+ HTTPSTestServer server;
+ HTTPSStreamFactory factory;
+ URI uri("https://localhost/notfound");
+ uri.setPort(server.port());
+ try
+ {
+ std::istream* pStr = factory.open(uri);
+ fail("not found - must throw");
+ }
+ catch (HTTPException& exc)
+ {
+ std::string m = exc.displayText();
+ }
+}
+
+
+void HTTPSStreamFactoryTest::setUp()
+{
+}
+
+
+void HTTPSStreamFactoryTest::tearDown()
+{
+}
+
+
+CppUnit::Test* HTTPSStreamFactoryTest::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSStreamFactoryTest");
+
+ CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testNoRedirect);
+ CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testEmptyPath);
+ CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testRedirect);
+ CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testProxy);
+ CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testError);
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.h b/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.h
new file mode 100644
index 000000000..df195c44a
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.h
@@ -0,0 +1,44 @@
+//
+// HTTPSStreamFactoryTest.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSStreamFactoryTest.h#1 $
+//
+// Definition of the HTTPSStreamFactoryTest class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSStreamFactoryTest_INCLUDED
+#define HTTPSStreamFactoryTest_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "CppUnit/TestCase.h"
+
+
+class HTTPSStreamFactoryTest: public CppUnit::TestCase
+{
+public:
+ HTTPSStreamFactoryTest(const std::string& name);
+ ~HTTPSStreamFactoryTest();
+
+ void testNoRedirect();
+ void testEmptyPath();
+ void testRedirect();
+ void testProxy();
+ void testError();
+
+ void setUp();
+ void tearDown();
+
+ static CppUnit::Test* suite();
+
+private:
+};
+
+
+#endif // HTTPSStreamFactoryTest_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/HTTPSTestServer.cpp b/NetSSL_Win/testsuite/src/HTTPSTestServer.cpp
new file mode 100644
index 000000000..0f32e78f4
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSTestServer.cpp
@@ -0,0 +1,232 @@
+//
+// HTTPSTestServer.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSTestServer.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "HTTPSTestServer.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SocketAddress.h"
+#include "Poco/Timespan.h"
+#include "Poco/NumberFormatter.h"
+#include
+
+
+using Poco::Net::Socket;
+using Poco::Net::StreamSocket;
+using Poco::Net::SecureStreamSocket;
+using Poco::Net::SecureServerSocket;
+using Poco::Net::SocketAddress;
+using Poco::NumberFormatter;
+
+
+const std::string HTTPSTestServer::SMALL_BODY("This is some random text data returned by the server");
+const std::string HTTPSTestServer::LARGE_BODY(4000, 'x');
+
+
+HTTPSTestServer::HTTPSTestServer():
+ _socket(SocketAddress()),
+ _thread("HTTPSTestServer"),
+ _stop(false)
+{
+ _thread.start(*this);
+ _ready.wait();
+ _lastRequest.reserve(4000);
+}
+
+
+HTTPSTestServer::HTTPSTestServer(Poco::Net::Context::Ptr pContext):
+ _socket(SocketAddress(), 64, pContext),
+ _thread("HTTPSTestServer"),
+ _stop(false)
+{
+ _thread.start(*this);
+ _ready.wait();
+ _lastRequest.reserve(4000);
+}
+
+
+HTTPSTestServer::~HTTPSTestServer()
+{
+ _stop = true;
+ _thread.join();
+}
+
+
+Poco::UInt16 HTTPSTestServer::port() const
+{
+ return _socket.address().port();
+}
+
+
+const std::string& HTTPSTestServer::lastRequest() const
+{
+ return _lastRequest;
+}
+
+
+void HTTPSTestServer::run()
+{
+ _ready.set();
+ Poco::Timespan span(250000);
+ while (!_stop)
+ {
+ if (_socket.poll(span, Socket::SELECT_READ))
+ {
+ StreamSocket ss = _socket.acceptConnection();
+ try
+ {
+ _lastRequest.clear();
+ char buffer[256];
+ int n = ss.receiveBytes(buffer, sizeof(buffer));
+ while (n > 0 && !_stop)
+ {
+ _lastRequest.append(buffer, n);
+ if (!requestComplete())
+ n = ss.receiveBytes(buffer, sizeof(buffer));
+ else
+ n = 0;
+ }
+ std::string response = handleRequest();
+ ss.sendBytes(response.data(), (int) response.size());
+ Poco::Thread::sleep(1000);
+ }
+ catch (Poco::Exception& exc)
+ {
+ std::cerr << "HTTPSTestServer: " << exc.displayText() << std::endl;
+ }
+ }
+ }
+}
+
+
+bool HTTPSTestServer::requestComplete() const
+{
+ return ((_lastRequest.substr(0, 3) == "GET" || _lastRequest.substr(0, 4) == "HEAD") &&
+ (_lastRequest.find("\r\n\r\n") != std::string::npos)) ||
+ (_lastRequest.find("\r\n0\r\n") != std::string::npos);
+}
+
+
+std::string HTTPSTestServer::handleRequest() const
+{
+ std::string response;
+ response.reserve(16000);
+ if (_lastRequest.substr(0, 10) == "GET /small" ||
+ _lastRequest.substr(0, 11) == "HEAD /small")
+ {
+ std::string body(SMALL_BODY);
+ response.append("HTTP/1.0 200 OK\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n");
+ response.append("Connection: Close\r\n");
+ response.append("\r\n");
+ if (_lastRequest.substr(0, 3) == "GET")
+ response.append(body);
+ }
+ else if (_lastRequest.substr(0, 10) == "GET /large" ||
+ _lastRequest.substr(0, 11) == "HEAD /large" ||
+ _lastRequest.substr(0, 36) == "GET http://www.somehost.com:80/large")
+ {
+ std::string body(LARGE_BODY);
+ response.append("HTTP/1.0 200 OK\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n");
+ response.append("Connection: Close\r\n");
+ response.append("\r\n");
+ if (_lastRequest.substr(0, 3) == "GET")
+ response.append(body);
+ }
+ else if (_lastRequest.substr(0, 4) == "POST")
+ {
+ std::string::size_type pos = _lastRequest.find("\r\n\r\n");
+ pos += 4;
+ std::string body = _lastRequest.substr(pos);
+ response.append("HTTP/1.0 200 OK\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ if (_lastRequest.find("Content-Length") != std::string::npos)
+ {
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n");
+ }
+ else if (_lastRequest.find("chunked") != std::string::npos)
+ {
+ response.append("Transfer-Encoding: chunked\r\n");
+ }
+ if (_lastRequest.substr(0,15) == "POST /keepAlive")
+ response.append("Connection: keep-alive\r\n");
+ else
+ response.append("Connection: Close\r\n");
+ response.append("\r\n");
+ response.append(body);
+ }
+ else if (_lastRequest.substr(0, 15) == "HEAD /keepAlive")
+ {
+ std::string body(SMALL_BODY);
+ response.append("HTTP/1.1 200 OK\r\n");
+ response.append("Connection: keep-alive\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n\r\n");
+ response.append("HTTP/1.1 200 OK\r\n");
+ response.append("Connection: Keep-Alive\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n\r\n");
+ response.append(body);
+ body = LARGE_BODY;
+ response.append("HTTP/1.1 200 OK\r\n");
+ response.append("Connection: keep-alive\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Transfer-Encoding: chunked\r\n\r\n");
+ response.append(NumberFormatter::formatHex((unsigned) body.length()));
+ response.append("\r\n");
+ response.append(body);
+ response.append("\r\n0\r\n\r\n");
+ response.append("HTTP/1.1 200 OK\r\n");
+ response.append("Connection: close\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n\r\n");
+ }
+ else if (_lastRequest.substr(0, 13) == "GET /redirect")
+ {
+ response.append("HTTP/1.0 302 Found\r\n");
+ response.append("Location: /large\r\n");
+ response.append("\r\n");
+ }
+ else if (_lastRequest.substr(0, 13) == "GET /notfound")
+ {
+ response.append("HTTP/1.0 404 Not Found\r\n");
+ response.append("\r\n");
+ }
+ else if (_lastRequest.substr(0, 5) == "GET /" ||
+ _lastRequest.substr(0, 6) == "HEAD /")
+ {
+ std::string body(SMALL_BODY);
+ response.append("HTTP/1.0 200 OK\r\n");
+ response.append("Content-Type: text/plain\r\n");
+ response.append("Content-Length: ");
+ response.append(NumberFormatter::format((int) body.size()));
+ response.append("\r\n");
+ response.append("Connection: Close\r\n");
+ response.append("\r\n");
+ if (_lastRequest.substr(0, 3) == "GET")
+ response.append(body);
+ }
+ return response;
+}
diff --git a/NetSSL_Win/testsuite/src/HTTPSTestServer.h b/NetSSL_Win/testsuite/src/HTTPSTestServer.h
new file mode 100644
index 000000000..b0961e3d1
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/HTTPSTestServer.h
@@ -0,0 +1,64 @@
+//
+// HTTPSTestServer.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/HTTPSTestServer.h#1 $
+//
+// Definition of the HTTPSTestServer class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef HTTPSTestServer_INCLUDED
+#define HTTPSTestServer_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "Poco/Net/SecureServerSocket.h"
+#include "Poco/Thread.h"
+#include "Poco/Event.h"
+
+
+class HTTPSTestServer: public Poco::Runnable
+ /// A simple sequential echo server.
+{
+public:
+ HTTPSTestServer();
+ /// Creates the HTTPSTestServer.
+
+ explicit HTTPSTestServer(Poco::Net::Context::Ptr pContext);
+ /// Creates the HTTPSTestServer using the given Context.
+
+ ~HTTPSTestServer();
+ /// Destroys the HTTPSTestServer.
+
+ Poco::UInt16 port() const;
+ /// Returns the port the echo server is
+ /// listening on.
+
+ void run();
+ /// Does the work.
+
+ const std::string& lastRequest() const;
+ /// Returns the last request.
+
+ static const std::string SMALL_BODY;
+ static const std::string LARGE_BODY;
+
+protected:
+ bool requestComplete() const;
+ std::string handleRequest() const;
+
+private:
+ Poco::Net::SecureServerSocket _socket;
+ Poco::Thread _thread;
+ Poco::Event _ready;
+ bool _stop;
+ std::string _lastRequest;
+};
+
+
+#endif // HTTPSTestServer_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/NetSSLTestSuite.cpp b/NetSSL_Win/testsuite/src/NetSSLTestSuite.cpp
new file mode 100644
index 000000000..3e6250d02
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/NetSSLTestSuite.cpp
@@ -0,0 +1,30 @@
+//
+// NetSSLTestSuite.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/NetSSLTestSuite.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "NetSSLTestSuite.h"
+
+#include "HTTPSClientTestSuite.h"
+#include "TCPServerTestSuite.h"
+#include "HTTPSServerTestSuite.h"
+
+
+CppUnit::Test* NetSSLTestSuite::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("OpenSSLTestSuite");
+
+
+ pSuite->addTest(HTTPSClientTestSuite::suite());
+ pSuite->addTest(TCPServerTestSuite::suite());
+ pSuite->addTest(HTTPSServerTestSuite::suite());
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/NetSSLTestSuite.h b/NetSSL_Win/testsuite/src/NetSSLTestSuite.h
new file mode 100644
index 000000000..103b0cf51
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/NetSSLTestSuite.h
@@ -0,0 +1,29 @@
+//
+// NetSSLTestSuite.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/NetSSLTestSuite.h#1 $
+//
+// Definition of the NetSSLTestSuite class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSLTestSuite_INCLUDED
+#define NetSSLTestSuite_INCLUDED
+
+
+#include "CppUnit/TestSuite.h"
+
+
+class NetSSLTestSuite
+{
+public:
+ static CppUnit::Test* suite();
+};
+
+
+#endif // NetSSLTestSuite_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/TCPServerTest.cpp b/NetSSL_Win/testsuite/src/TCPServerTest.cpp
new file mode 100644
index 000000000..780510a67
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/TCPServerTest.cpp
@@ -0,0 +1,395 @@
+//
+// TCPServerTest.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/TCPServerTest.cpp#2 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "TCPServerTest.h"
+#include "CppUnit/TestCaller.h"
+#include "CppUnit/TestSuite.h"
+#include "Poco/Net/TCPServer.h"
+#include "Poco/Net/TCPServerConnection.h"
+#include "Poco/Net/TCPServerConnectionFactory.h"
+#include "Poco/Net/TCPServerParams.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureServerSocket.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Session.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/AbstractConfiguration.h"
+#include "Poco/Thread.h"
+#include
+
+
+using Poco::Net::TCPServer;
+using Poco::Net::TCPServerConnection;
+using Poco::Net::TCPServerConnectionFactory;
+using Poco::Net::TCPServerConnectionFactoryImpl;
+using Poco::Net::TCPServerParams;
+using Poco::Net::StreamSocket;
+using Poco::Net::SecureStreamSocket;
+using Poco::Net::SecureServerSocket;
+using Poco::Net::SocketAddress;
+using Poco::Net::Context;
+using Poco::Net::Session;
+using Poco::Net::SSLManager;
+using Poco::Thread;
+using Poco::Util::Application;
+
+
+namespace
+{
+ class EchoConnection: public TCPServerConnection
+ {
+ public:
+ EchoConnection(const StreamSocket& s): TCPServerConnection(s)
+ {
+ }
+
+ void run()
+ {
+ StreamSocket& ss = socket();
+ try
+ {
+ char buffer[256];
+ int n = ss.receiveBytes(buffer, sizeof(buffer));
+ while (n > 0)
+ {
+ ss.sendBytes(buffer, n);
+ n = ss.receiveBytes(buffer, sizeof(buffer));
+ }
+ }
+ catch (Poco::Exception& exc)
+ {
+ std::cerr << "EchoConnection: " << exc.displayText() << std::endl;
+ }
+ }
+ };
+}
+
+
+TCPServerTest::TCPServerTest(const std::string& name): CppUnit::TestCase(name)
+{
+}
+
+
+TCPServerTest::~TCPServerTest()
+{
+}
+
+
+void TCPServerTest::testOneConnection()
+{
+ SecureServerSocket svs(0);
+ TCPServer srv(new TCPServerConnectionFactoryImpl(), svs);
+ srv.start();
+ assert (srv.currentConnections() == 0);
+ assert (srv.currentThreads() == 0);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 0);
+
+ SocketAddress sa("localhost", svs.address().port());
+ SecureStreamSocket ss1(sa);
+ std::string data("hello, world");
+ ss1.sendBytes(data.data(), (int) data.size());
+ char buffer[256];
+ int n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.currentThreads() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 1);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+}
+
+
+void TCPServerTest::testTwoConnections()
+{
+ SecureServerSocket svs(0);
+ TCPServer srv(new TCPServerConnectionFactoryImpl(), svs);
+ srv.start();
+ assert (srv.currentConnections() == 0);
+ assert (srv.currentThreads() == 0);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 0);
+
+ SocketAddress sa("localhost", svs.address().port());
+ SecureStreamSocket ss1(sa);
+ SecureStreamSocket ss2(sa);
+ std::string data("hello, world");
+ ss1.sendBytes(data.data(), (int) data.size());
+ ss2.sendBytes(data.data(), (int) data.size());
+
+ char buffer[256];
+ int n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ n = ss2.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ assert (srv.currentConnections() == 2);
+ assert (srv.currentThreads() == 2);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 2);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 1);
+ assert (srv.currentThreads() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 2);
+ ss2.close();
+
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+}
+
+
+void TCPServerTest::testMultiConnections()
+{
+ SecureServerSocket svs(0);
+ TCPServerParams* pParams = new TCPServerParams;
+ pParams->setMaxThreads(4);
+ pParams->setMaxQueued(4);
+ pParams->setThreadIdleTime(100);
+ TCPServer srv(new TCPServerConnectionFactoryImpl(), svs, pParams);
+ srv.start();
+ assert (srv.currentConnections() == 0);
+ assert (srv.currentThreads() == 0);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 0);
+
+ SocketAddress sa("localhost", svs.address().port());
+ SecureStreamSocket ss1(sa);
+ SecureStreamSocket ss2(sa);
+ SecureStreamSocket ss3(sa);
+ SecureStreamSocket ss4(sa);
+ std::string data("hello, world");
+ ss1.sendBytes(data.data(), (int) data.size());
+ ss2.sendBytes(data.data(), (int) data.size());
+ ss3.sendBytes(data.data(), (int) data.size());
+ ss4.sendBytes(data.data(), (int) data.size());
+
+ char buffer[256];
+ int n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ n = ss2.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ n = ss3.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ n = ss4.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+
+ assert (srv.currentConnections() == 4);
+ assert (srv.currentThreads() == 4);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 4);
+
+ SecureStreamSocket ss5;
+ ss5.setLazyHandshake();
+ ss5.connect(sa);
+ Thread::sleep(200);
+ assert (srv.queuedConnections() == 1);
+ SecureStreamSocket ss6;
+ ss6.setLazyHandshake();
+ ss6.connect(sa);
+ Thread::sleep(200);
+ assert (srv.queuedConnections() == 2);
+
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 4);
+ assert (srv.currentThreads() == 4);
+ assert (srv.queuedConnections() == 1);
+ assert (srv.totalConnections() == 5);
+
+ ss2.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 4);
+ assert (srv.currentThreads() == 4);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 6);
+
+ ss3.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 3);
+ assert (srv.currentThreads() == 3);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 6);
+
+ ss4.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 2);
+ assert (srv.currentThreads() == 2);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 6);
+
+ ss5.close();
+ ss6.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+}
+
+
+void TCPServerTest::testReuseSocket()
+{
+ SecureServerSocket svs(0);
+ TCPServer srv(new TCPServerConnectionFactoryImpl(), svs);
+ srv.start();
+ assert (srv.currentConnections() == 0);
+ assert (srv.currentThreads() == 0);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 0);
+
+ SocketAddress sa("localhost", svs.address().port());
+ SecureStreamSocket ss1(sa);
+ std::string data("hello, world");
+ ss1.sendBytes(data.data(), (int) data.size());
+ char buffer[256];
+ int n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.currentThreads() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 1);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+
+ ss1.connect(sa);
+ ss1.sendBytes(data.data(), (int) data.size());
+ n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 2);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+}
+
+
+void TCPServerTest::testReuseSession()
+{
+ // ensure SSL machinery is fully setup
+ Context::Ptr pDefaultServerContext = SSLManager::instance().defaultServerContext();
+ Context::Ptr pDefaultClientContext = SSLManager::instance().defaultClientContext();
+
+ Context::Ptr pServerContext = new Context(
+ Context::SERVER_USE,
+ "test.appinf.com");
+ //pServerContext->enableSessionCache(true, "TestSuite");
+ //pServerContext->setSessionTimeout(10);
+ //pServerContext->setSessionCacheSize(1000);
+ //pServerContext->disableStatelessSessionResumption();
+
+ SecureServerSocket svs(0, 64, pServerContext);
+ TCPServer srv(new TCPServerConnectionFactoryImpl(), svs);
+ srv.start();
+ assert (srv.currentConnections() == 0);
+ assert (srv.currentThreads() == 0);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 0);
+
+ Context::Ptr pClientContext = new Context(
+ Context::CLIENT_USE,
+ "");
+ //pClientContext->enableSessionCache(true);
+
+ SocketAddress sa("localhost", svs.address().port());
+ SecureStreamSocket ss1(sa, pClientContext);
+ assert (!ss1.sessionWasReused());
+ std::string data("hello, world");
+ ss1.sendBytes(data.data(), (int) data.size());
+ char buffer[256];
+ int n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.currentThreads() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 1);
+
+ Session::Ptr pSession = ss1.currentSession();
+
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+
+ ss1.useSession(pSession);
+ ss1.connect(sa);
+ assert (ss1.sessionWasReused());
+ assert (ss1.currentSession() == pSession);
+ ss1.sendBytes(data.data(), (int) data.size());
+ n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 2);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+
+ Thread::sleep(15000); // wait for session to expire
+ //pServerContext->flushSessionCache();
+
+ ss1.useSession(pSession);
+ ss1.connect(sa);
+ assert (!ss1.sessionWasReused());
+ assert (ss1.currentSession() != pSession);
+ ss1.sendBytes(data.data(), (int) data.size());
+ n = ss1.receiveBytes(buffer, sizeof(buffer));
+ assert (n > 0);
+ assert (std::string(buffer, n) == data);
+ assert (srv.currentConnections() == 1);
+ assert (srv.queuedConnections() == 0);
+ assert (srv.totalConnections() == 3);
+ ss1.close();
+ Thread::sleep(300);
+ assert (srv.currentConnections() == 0);
+}
+
+
+void TCPServerTest::setUp()
+{
+}
+
+
+void TCPServerTest::tearDown()
+{
+}
+
+
+CppUnit::Test* TCPServerTest::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTest");
+
+ CppUnit_addTest(pSuite, TCPServerTest, testOneConnection);
+ CppUnit_addTest(pSuite, TCPServerTest, testTwoConnections);
+ CppUnit_addTest(pSuite, TCPServerTest, testMultiConnections);
+ CppUnit_addTest(pSuite, TCPServerTest, testReuseSocket);
+ //CppUnit_addTest(pSuite, TCPServerTest, testReuseSession);
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/TCPServerTest.h b/NetSSL_Win/testsuite/src/TCPServerTest.h
new file mode 100644
index 000000000..a71fe40a2
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/TCPServerTest.h
@@ -0,0 +1,44 @@
+//
+// TCPServerTest.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/TCPServerTest.h#1 $
+//
+// Definition of the TCPServerTest class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef TCPServerTest_INCLUDED
+#define TCPServerTest_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "CppUnit/TestCase.h"
+
+
+class TCPServerTest: public CppUnit::TestCase
+{
+public:
+ TCPServerTest(const std::string& name);
+ ~TCPServerTest();
+
+ void testOneConnection();
+ void testTwoConnections();
+ void testMultiConnections();
+ void testReuseSocket();
+ void testReuseSession();
+
+ void setUp();
+ void tearDown();
+
+ static CppUnit::Test* suite();
+
+private:
+};
+
+
+#endif // TCPServerTest_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/TCPServerTestSuite.cpp b/NetSSL_Win/testsuite/src/TCPServerTestSuite.cpp
new file mode 100644
index 000000000..4c622980d
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/TCPServerTestSuite.cpp
@@ -0,0 +1,24 @@
+//
+// TCPServerTestSuite.cpp
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/TCPServerTestSuite.cpp#1 $
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "TCPServerTestSuite.h"
+#include "TCPServerTest.h"
+
+
+CppUnit::Test* TCPServerTestSuite::suite()
+{
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTestSuite");
+
+ pSuite->addTest(TCPServerTest::suite());
+
+ return pSuite;
+}
diff --git a/NetSSL_Win/testsuite/src/TCPServerTestSuite.h b/NetSSL_Win/testsuite/src/TCPServerTestSuite.h
new file mode 100644
index 000000000..e803a85d5
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/TCPServerTestSuite.h
@@ -0,0 +1,29 @@
+//
+// TCPServerTestSuite.h
+//
+// $Id: //poco/1.4/NetSSL_Win/testsuite/src/TCPServerTestSuite.h#1 $
+//
+// Definition of the TCPServerTestSuite class.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef TCPServerTestSuite_INCLUDED
+#define TCPServerTestSuite_INCLUDED
+
+
+#include "CppUnit/TestSuite.h"
+
+
+class TCPServerTestSuite
+{
+public:
+ static CppUnit::Test* suite();
+};
+
+
+#endif // TCPServerTestSuite_INCLUDED
diff --git a/NetSSL_Win/testsuite/src/WinCEDriver.cpp b/NetSSL_Win/testsuite/src/WinCEDriver.cpp
new file mode 100644
index 000000000..54741c3d2
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/WinCEDriver.cpp
@@ -0,0 +1,90 @@
+//
+// WinCEDriver.cpp
+//
+// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp#1 $
+//
+// Console-based test driver for Windows CE.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "CppUnit/TestRunner.h"
+#include "NetSSLTestSuite.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Net/HTTPStreamFactory.h"
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include
+
+
+class NetSSLApp: public Poco::Util::Application
+{
+public:
+ NetSSLApp()
+ {
+ Poco::Net::initializeSSL();
+ Poco::Net::HTTPStreamFactory::registerFactory();
+ Poco::Net::HTTPSStreamFactory::registerFactory();
+ }
+
+ ~NetSSLApp()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+
+ int main(const std::vector& args)
+ {
+ CppUnit::TestRunner runner;
+ runner.addTest("NetSSLTestSuite", NetSSLTestSuite::suite());
+ return runner.run(_targs) ? 0 : 1;
+ }
+
+ void setup(const std::vector& args)
+ {
+ char* argv[] =
+ {
+ const_cast(args[0].c_str())
+ };
+
+ init(1, argv);
+ for (std::size_t i = 0; i < args.size(); ++i)
+ _targs.push_back(args[i]);
+ }
+
+protected:
+ void initialize(Poco::Util::Application& self)
+ {
+ loadConfiguration(); // load default configuration files, if present
+ Poco::Util::Application::initialize(self);
+ }
+
+private:
+ std::vector _targs;
+};
+
+
+int _tmain(int argc, wchar_t* argv[])
+{
+ std::vector args;
+ for (int i = 0; i < argc; ++i)
+ {
+ char buffer[1024];
+ std::wcstombs(buffer, argv[i], sizeof(buffer));
+ args.push_back(std::string(buffer));
+ }
+
+ NetSSLApp app;
+ try
+ {
+ app.setup(args);
+ return app.run();
+ }
+ catch (Poco::Exception& exc)
+ {
+ std::cout << exc.displayText() << std::endl;
+ return 1;
+ }
+}
diff --git a/NetSSL_Win/testsuite/src/WinDriver.cpp b/NetSSL_Win/testsuite/src/WinDriver.cpp
new file mode 100644
index 000000000..7873ea0b1
--- /dev/null
+++ b/NetSSL_Win/testsuite/src/WinDriver.cpp
@@ -0,0 +1,77 @@
+//
+// WinDriver.cpp
+//
+// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/WinDriver.cpp#1 $
+//
+// Windows test driver for Poco NetSSL.
+//
+// Copyright (c) 2006-2014, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "WinTestRunner/WinTestRunner.h"
+#include "NetSSLTestSuite.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Net/HTTPStreamFactory.h"
+#include "Poco/Net/HTTPSStreamFactory.h"
+
+
+class NetSSLApp: public Poco::Util::Application
+{
+public:
+ NetSSLApp()
+ {
+ Poco::Net::initializeSSL();
+ Poco::Net::HTTPStreamFactory::registerFactory();
+ Poco::Net::HTTPSStreamFactory::registerFactory();
+ }
+
+ ~NetSSLApp()
+ {
+ Poco::Net::uninitializeSSL();
+ }
+
+ int main(const std::vector& args)
+ {
+ CppUnit::WinTestRunner runner;
+ runner.addTest(NetSSLTestSuite::suite());
+ runner.run();
+ return 0;
+ }
+
+protected:
+ void initialize(Poco::Util::Application& self)
+ {
+ loadConfiguration(); // load default configuration files, if present
+ Poco::Util::Application::initialize(self);
+ }
+
+private:
+ std::vector _targs;
+};
+
+
+class TestDriver: public CppUnit::WinTestRunnerApp
+{
+ void TestMain()
+ {
+ NetSSLApp app;
+ std::string argv("TestSuite");
+ const char* pArgv = argv.c_str();
+ try
+ {
+ app.init(1, (char**)&pArgv);
+ app.run();
+ }
+ catch (Poco::Exception& exc)
+ {
+ app.logger().log(exc);
+ }
+ }
+};
+
+
+static TestDriver theDriver;
diff --git a/NetSSL_Win/testsuite/testrunner.xml b/NetSSL_Win/testsuite/testrunner.xml
new file mode 100644
index 000000000..2c03eb7be
--- /dev/null
+++ b/NetSSL_Win/testsuite/testrunner.xml
@@ -0,0 +1,29 @@
+
+
+
+ ${system.nodeName}
+ none
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+ relaxed
+ false
+
+ AcceptCertificateHandler
+
+
+
+
+
+
+
+ proxy.aon.at
+ 8080
+
+
+