Merge branch 'poco-1.10.0' into devel

This commit is contained in:
Günter Obiltschnig
2020-01-23 19:11:07 +01:00
32 changed files with 2473 additions and 395 deletions

View File

@@ -117,9 +117,9 @@ namespace
if (_iv.size() != EVP_CIPHER_iv_length(_pCipher) && EVP_CIPHER_mode(_pCipher) == EVP_CIPH_GCM_MODE) if (_iv.size() != EVP_CIPHER_iv_length(_pCipher) && EVP_CIPHER_mode(_pCipher) == EVP_CIPH_GCM_MODE)
{ {
#if OPENSSL_VERSION_NUMBER >= 0x10100000L #if OPENSSL_VERSION_NUMBER >= 0x10100000L
int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_SET_IVLEN, _iv.size(), NULL); int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_SET_IVLEN, static_cast<int>(_iv.size()), NULL);
#else #else
int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_SET_IVLEN, _iv.size(), NULL); int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_SET_IVLEN, static_cast<int>(_iv.size()), NULL);
#endif #endif
if (rc == 0) throwError(); if (rc == 0) throwError();
} }
@@ -164,9 +164,9 @@ namespace
#if OPENSSL_VERSION_NUMBER >= 0x10001000L #if OPENSSL_VERSION_NUMBER >= 0x10001000L
Poco::Buffer<char> buffer(tagSize); Poco::Buffer<char> buffer(tagSize);
#if OPENSSL_VERSION_NUMBER >= 0x10100000L #if OPENSSL_VERSION_NUMBER >= 0x10100000L
int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_GET_TAG, tagSize, buffer.begin()); int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_GET_TAG, static_cast<int>(tagSize), buffer.begin());
#else #else
int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_GET_TAG, tagSize, buffer.begin()); int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_GET_TAG, static_cast<int>(tagSize), buffer.begin());
#endif #endif
if (rc == 0) throwError(); if (rc == 0) throwError();
tag.assign(buffer.begin(), tagSize); tag.assign(buffer.begin(), tagSize);
@@ -178,9 +178,9 @@ namespace
void CryptoTransformImpl::setTag(const std::string& tag) void CryptoTransformImpl::setTag(const std::string& tag)
{ {
#if OPENSSL_VERSION_NUMBER >= 0x10100000L #if OPENSSL_VERSION_NUMBER >= 0x10100000L
int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_SET_TAG, tag.size(), const_cast<char*>(tag.data())); int rc = EVP_CIPHER_CTX_ctrl(_pContext, EVP_CTRL_GCM_SET_TAG, static_cast<int>(tag.size()), const_cast<char*>(tag.data()));
#elif OPENSSL_VERSION_NUMBER >= 0x10001000L #elif OPENSSL_VERSION_NUMBER >= 0x10001000L
int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_SET_TAG, tag.size(), const_cast<char*>(tag.data())); int rc = EVP_CIPHER_CTX_ctrl(&_context, EVP_CTRL_GCM_SET_TAG, static_cast<int>(tag.size()), const_cast<char*>(tag.data()));
#else #else
int rc = 0; int rc = 0;
#endif #endif

View File

@@ -54,8 +54,8 @@ public:
enum FileType enum FileType
{ {
TYPE_TEXT, // TYPE A (ASCII) TYPE_TEXT, /// TYPE A (ASCII)
TYPE_BINARY // TYPE I (Image) TYPE_BINARY /// TYPE I (Image/binary data)
}; };
FTPClientSession(); FTPClientSession();
@@ -63,16 +63,13 @@ public:
/// ///
/// Passive mode will be used for data transfers. /// Passive mode will be used for data transfers.
explicit FTPClientSession(const StreamSocket& socket); FTPClientSession(const StreamSocket& socket, bool readWelcomeMessage = true);
/// Creates an FTPClientSession using the given /// Creates an FTPClientSession using the given
/// connected socket for the control connection. /// connected socket for the control connection.
/// ///
/// Passive mode will be used for data transfers. /// Passive mode will be used for data transfers.
FTPClientSession(const std::string& host, FTPClientSession(const std::string& host, Poco::UInt16 port = FTP_PORT, const std::string& username = "", const std::string& password = "");
Poco::UInt16 port = FTP_PORT,
const std::string& username = "",
const std::string& password = "");
/// Creates an FTPClientSession using a socket connected /// Creates an FTPClientSession using a socket connected
/// to the given host and port. If username is supplied, /// to the given host and port. If username is supplied,
/// login is attempted. /// login is attempted.
@@ -99,14 +96,11 @@ public:
bool getPassive() const; bool getPassive() const;
/// Returns true iff passive mode is enabled for this connection. /// Returns true iff passive mode is enabled for this connection.
void open(const std::string& host, virtual void open(const std::string& host, Poco::UInt16 port, const std::string& username = "", const std::string& password = "");
Poco::UInt16 port,
const std::string& username = "",
const std::string& password = "");
/// Opens the FTP connection to the given host and port. /// Opens the FTP connection to the given host and port.
/// If username is supplied, login is attempted. /// If username is supplied, login is attempted.
void login(const std::string& username, const std::string& password); virtual void login(const std::string& username, const std::string& password);
/// Authenticates the user against the FTP server. Must be /// Authenticates the user against the FTP server. Must be
/// called before any other commands (except QUIT) can be sent. /// called before any other commands (except QUIT) can be sent.
/// ///
@@ -117,6 +111,9 @@ public:
/// NetException in case of a general network communication failure. /// NetException in case of a general network communication failure.
void logout(); void logout();
/// Logs out from the server by sending a QUIT command. Any transfer
/// that's in progress is ended. The control connection is kept
/// open.
void close(); void close();
/// Sends a QUIT command and closes the connection to the server. /// Sends a QUIT command and closes the connection to the server.
@@ -302,7 +299,15 @@ public:
bool isLoggedIn() const; bool isLoggedIn() const;
/// Returns true if the session is logged in. /// Returns true if the session is logged in.
bool isSecure() const;
/// Returns true if the session is FTPS.
const std::string& welcomeMessage();
/// Returns the welcome message.
protected: protected:
virtual void receiveServerReadyReply();
enum StatusClass enum StatusClass
{ {
FTP_POSITIVE_PRELIMINARY = 1, FTP_POSITIVE_PRELIMINARY = 1,
@@ -311,6 +316,7 @@ protected:
FTP_TRANSIENT_NEGATIVE = 4, FTP_TRANSIENT_NEGATIVE = 4,
FTP_PERMANENT_NEGATIVE = 5 FTP_PERMANENT_NEGATIVE = 5
}; };
enum enum
{ {
DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations
@@ -322,7 +328,7 @@ protected:
static bool isTransientNegative(int status); static bool isTransientNegative(int status);
static bool isPermanentNegative(int status); static bool isPermanentNegative(int status);
std::string extractPath(const std::string& response); std::string extractPath(const std::string& response);
StreamSocket establishDataConnection(const std::string& command, const std::string& arg); virtual StreamSocket establishDataConnection(const std::string& command, const std::string& arg);
StreamSocket activeDataConnection(const std::string& command, const std::string& arg); StreamSocket activeDataConnection(const std::string& command, const std::string& arg);
StreamSocket passiveDataConnection(const std::string& command, const std::string& arg); StreamSocket passiveDataConnection(const std::string& command, const std::string& arg);
void sendPortCommand(const SocketAddress& addr); void sendPortCommand(const SocketAddress& addr);
@@ -335,20 +341,23 @@ protected:
void parseExtAddress(const std::string& str, SocketAddress& addr); void parseExtAddress(const std::string& str, SocketAddress& addr);
void endTransfer(); void endTransfer();
DialogSocket* _pControlSocket = nullptr;
SocketStream* _pDataStream = nullptr;
private: private:
FTPClientSession(const FTPClientSession&); FTPClientSession(const FTPClientSession&);
FTPClientSession& operator = (const FTPClientSession&); FTPClientSession& operator = (const FTPClientSession&);
std::string _host; std::string _host;
Poco::UInt16 _port; Poco::UInt16 _port = FTP_PORT;
DialogSocket* _pControlSocket; bool _passiveMode = true;
SocketStream* _pDataStream; FileType _fileType = TYPE_BINARY;
bool _passiveMode; bool _supports1738 = true;
FileType _fileType; bool _serverReady = false;
bool _supports1738; bool _isLoggedIn = false;
bool _serverReady; Poco::Timespan _timeout = DEFAULT_TIMEOUT;
bool _isLoggedIn; std::string _welcomeMessage;
Poco::Timespan _timeout; Poco::FastMutex _wmMutex;
}; };
@@ -397,6 +406,19 @@ inline bool FTPClientSession::isLoggedIn() const
} }
inline bool FTPClientSession::isSecure() const
{
return false;
}
inline const std::string& FTPClientSession::welcomeMessage()
{
Poco::FastMutex::ScopedLock lock(_wmMutex);
return _welcomeMessage;
}
} } // namespace Poco::Net } } // namespace Poco::Net

View File

@@ -31,7 +31,7 @@ class Net_API FTPPasswordProvider
/// The base class for all password providers. /// The base class for all password providers.
/// An instance of a subclass of this class can be /// An instance of a subclass of this class can be
/// registered with the FTPStreamFactory to /// registered with the FTPStreamFactory to
/// provide a password /// provide a password.
{ {
public: public:
virtual std::string password(const std::string& username, const std::string& host) = 0; virtual std::string password(const std::string& username, const std::string& host) = 0;
@@ -56,7 +56,7 @@ class Net_API FTPStreamFactory: public Poco::URIStreamFactory
/// the FTP URL format specified in RFC 1738. /// the FTP URL format specified in RFC 1738.
/// ///
/// If the URI does not contain a username and password, the /// If the URI does not contain a username and password, the
/// username "anonymous" and the password " /// username "anonymous" and the password "poco@localhost".
{ {
public: public:
FTPStreamFactory(); FTPStreamFactory();

View File

@@ -29,9 +29,9 @@ namespace Net {
FTPClientSession::FTPClientSession(): FTPClientSession::FTPClientSession():
_port(0),
_pControlSocket(0), _pControlSocket(0),
_pDataStream(0), _pDataStream(0),
_port(FTP_PORT),
_passiveMode(true), _passiveMode(true),
_fileType(TYPE_BINARY), _fileType(TYPE_BINARY),
_supports1738(true), _supports1738(true),
@@ -42,11 +42,11 @@ FTPClientSession::FTPClientSession():
} }
FTPClientSession::FTPClientSession(const StreamSocket& socket): FTPClientSession::FTPClientSession(const StreamSocket& socket, bool readWelcomeMessage):
_host(socket.address().host().toString()),
_port(socket.address().port()),
_pControlSocket(new DialogSocket(socket)), _pControlSocket(new DialogSocket(socket)),
_pDataStream(0), _pDataStream(0),
_host(socket.address().host().toString()),
_port(socket.address().port()),
_passiveMode(true), _passiveMode(true),
_fileType(TYPE_BINARY), _fileType(TYPE_BINARY),
_supports1738(true), _supports1738(true),
@@ -55,6 +55,14 @@ FTPClientSession::FTPClientSession(const StreamSocket& socket):
_timeout(DEFAULT_TIMEOUT) _timeout(DEFAULT_TIMEOUT)
{ {
_pControlSocket->setReceiveTimeout(_timeout); _pControlSocket->setReceiveTimeout(_timeout);
if (readWelcomeMessage)
{
receiveServerReadyReply();
}
else
{
_serverReady = true;
}
} }
@@ -62,10 +70,10 @@ FTPClientSession::FTPClientSession(const std::string& host,
Poco::UInt16 port, Poco::UInt16 port,
const std::string& username, const std::string& username,
const std::string& password): const std::string& password):
_host(host),
_port(port),
_pControlSocket(new DialogSocket(SocketAddress(host, port))), _pControlSocket(new DialogSocket(SocketAddress(host, port))),
_pDataStream(0), _pDataStream(0),
_host(host),
_port(port),
_passiveMode(true), _passiveMode(true),
_fileType(TYPE_BINARY), _fileType(TYPE_BINARY),
_supports1738(true), _supports1738(true),
@@ -73,10 +81,9 @@ FTPClientSession::FTPClientSession(const std::string& host,
_isLoggedIn(false), _isLoggedIn(false),
_timeout(DEFAULT_TIMEOUT) _timeout(DEFAULT_TIMEOUT)
{ {
_pControlSocket->setReceiveTimeout(_timeout);
if (!username.empty()) if (!username.empty())
login(username, password); login(username, password);
else
_pControlSocket->setReceiveTimeout(_timeout);
} }
@@ -133,10 +140,30 @@ void FTPClientSession::open(const std::string& host,
login(username, password); login(username, password);
} }
else else
{
if (!_pControlSocket)
{ {
_pControlSocket = new DialogSocket(SocketAddress(_host, _port)); _pControlSocket = new DialogSocket(SocketAddress(_host, _port));
_pControlSocket->setReceiveTimeout(_timeout); _pControlSocket->setReceiveTimeout(_timeout);
} }
receiveServerReadyReply();
}
}
void FTPClientSession::receiveServerReadyReply()
{
if (_serverReady) return;
std::string response;
int status = _pControlSocket->receiveStatusMessage(response);
if (!isPositiveCompletion(status))
throw FTPException("Cannot receive status message", response, status);
{
Poco::FastMutex::ScopedLock lock(_wmMutex);
_welcomeMessage = response;
}
_serverReady = true;
} }
@@ -151,15 +178,7 @@ void FTPClientSession::login(const std::string& username, const std::string& pas
_pControlSocket = new DialogSocket(SocketAddress(_host, _port)); _pControlSocket = new DialogSocket(SocketAddress(_host, _port));
_pControlSocket->setReceiveTimeout(_timeout); _pControlSocket->setReceiveTimeout(_timeout);
} }
receiveServerReadyReply();
if (!_serverReady)
{
status = _pControlSocket->receiveStatusMessage(response);
if (!isPositiveCompletion(status))
throw FTPException("Cannot login to server", response, status);
_serverReady = true;
}
status = sendCommand("USER", username, response); status = sendCommand("USER", username, response);
if (isPositiveIntermediate(status)) if (isPositiveIntermediate(status))
@@ -179,8 +198,13 @@ void FTPClientSession::logout()
if (_isLoggedIn) if (_isLoggedIn)
{ {
try { endTransfer(); } try
catch (...) { } {
endTransfer();
}
catch (...)
{
}
_isLoggedIn = false; _isLoggedIn = false;
std::string response; std::string response;
sendCommand("QUIT", response); sendCommand("QUIT", response);
@@ -190,8 +214,13 @@ void FTPClientSession::logout()
void FTPClientSession::close() void FTPClientSession::close()
{ {
try { logout(); } try
catch (...) {} {
logout();
}
catch (...)
{
}
_serverReady = false; _serverReady = false;
if (_pControlSocket) if (_pControlSocket)
{ {

View File

@@ -16,7 +16,8 @@ objects = AcceptCertificateHandler RejectCertificateHandler ConsoleCertificateHa
PrivateKeyPassphraseHandler SecureServerSocket SecureServerSocketImpl \ PrivateKeyPassphraseHandler SecureServerSocket SecureServerSocketImpl \
SecureSocketImpl SecureStreamSocket SecureStreamSocketImpl \ SecureSocketImpl SecureStreamSocket SecureStreamSocketImpl \
SSLException SSLManager Utility VerificationErrorArgs \ SSLException SSLManager Utility VerificationErrorArgs \
X509Certificate Session SecureSMTPClientSession X509Certificate Session SecureSMTPClientSession \
FTPSClientSession FTPSStreamFactory
target = PocoNetSSL target = PocoNetSSL
target_version = $(LIBVERSION) target_version = $(LIBVERSION)

View File

@@ -551,6 +551,8 @@
<ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/> <ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/>
<ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/> <ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/>
<ClInclude Include="include\Poco\Net\Context.h"/> <ClInclude Include="include\Poco\Net\Context.h"/>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h"/>
<ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/> <ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/> <ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/>
<ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/> <ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/>
@@ -591,6 +593,12 @@
<ClCompile Include="src\Context.cpp"> <ClCompile Include="src\Context.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSession.cpp"> <ClCompile Include="src\HTTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,40 +2,49 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="SSLCore"> <Filter Include="SSLCore">
<UniqueIdentifier>{1d3c9218-bace-4c13-b46a-35c6a5bccba7}</UniqueIdentifier> <UniqueIdentifier>{96483e9a-1b50-4158-a142-f5b002b7cfb7}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Header Files"> <Filter Include="SSLCore\Header Files">
<UniqueIdentifier>{fd9bec97-ed5d-46bc-a09e-ee2600de92c1}</UniqueIdentifier> <UniqueIdentifier>{30f78015-0f34-4e3c-8cfa-3891e6fff770}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Source Files"> <Filter Include="SSLCore\Source Files">
<UniqueIdentifier>{870ae1f0-94e3-4a07-9ebc-936f6cdf24c6}</UniqueIdentifier> <UniqueIdentifier>{4b30214a-17d0-4b49-802c-0adb22df12ec}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{06f3254e-f624-46d8-b2f8-cb8e70dd4e56}</UniqueIdentifier> <UniqueIdentifier>{82cc816f-cb04-4308-af59-48ad28321e0f}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{aa21dbeb-0367-4b3a-b742-398c8c5d09d3}</UniqueIdentifier> <UniqueIdentifier>{20e8d97d-860e-43f0-a299-2c7cb8419b27}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{53247053-60a7-46d7-aec0-371694b53452}</UniqueIdentifier> <UniqueIdentifier>{ead13b96-dcc7-40b3-8272-923482a1b7a6}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets"> <Filter Include="SSLSockets">
<UniqueIdentifier>{00be4aeb-17ea-4c8a-8fb5-69e9426bb669}</UniqueIdentifier> <UniqueIdentifier>{aabe8d15-cddb-468b-864f-d6766aaaaeba}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Header Files"> <Filter Include="SSLSockets\Header Files">
<UniqueIdentifier>{238242b9-aca8-4b2b-9801-5061487e0512}</UniqueIdentifier> <UniqueIdentifier>{8d9c4e00-5f70-433b-90fe-0970c0af3f2b}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Source Files"> <Filter Include="SSLSockets\Source Files">
<UniqueIdentifier>{5e85139f-74cc-453a-971a-95d246715654}</UniqueIdentifier> <UniqueIdentifier>{c45ddcee-359b-484d-b332-a50c0e142430}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail"> <Filter Include="Mail">
<UniqueIdentifier>{3b8674d0-cfcb-4a43-b311-89b02d6de0c5}</UniqueIdentifier> <UniqueIdentifier>{7ebf84f2-13a4-495e-bc10-b2b8399f4860}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Header Files"> <Filter Include="Mail\Header Files">
<UniqueIdentifier>{f8853ab8-67e3-401c-ab18-818ab75d7981}</UniqueIdentifier> <UniqueIdentifier>{3ee151c2-5f61-4502-9bd3-445899b3368c}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Source Files"> <Filter Include="Mail\Source Files">
<UniqueIdentifier>{6723ec97-07f1-4589-8a4b-b33af5b88fa8}</UniqueIdentifier> <UniqueIdentifier>{f293d549-4924-4c8f-9c6d-1f3e3a3b123a}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{3f647633-d450-42d5-85e4-925aed618fa5}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{b26ac41f-f190-447d-be3b-a9b84605c3b7}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{d3e245cd-0c38-4824-ad2e-a7bf85f63e0f}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -123,6 +132,12 @@
<ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h"> <ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h">
<Filter>Mail\Header Files</Filter> <Filter>Mail\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\AcceptCertificateHandler.cpp"> <ClCompile Include="src\AcceptCertificateHandler.cpp">
@@ -206,6 +221,12 @@
<ClCompile Include="src\SecureSMTPClientSession.cpp"> <ClCompile Include="src\SecureSMTPClientSession.cpp">
<Filter>Mail\Source Files</Filter> <Filter>Mail\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" /> <ResourceCompile Include="..\DLLVersion.rc" />

View File

@@ -551,6 +551,8 @@
<ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/> <ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/>
<ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/> <ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/>
<ClInclude Include="include\Poco\Net\Context.h"/> <ClInclude Include="include\Poco\Net\Context.h"/>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h"/>
<ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/> <ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/> <ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/>
<ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/> <ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/>
@@ -591,6 +593,12 @@
<ClCompile Include="src\Context.cpp"> <ClCompile Include="src\Context.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSession.cpp"> <ClCompile Include="src\HTTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,40 +2,49 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="SSLCore"> <Filter Include="SSLCore">
<UniqueIdentifier>{3ac1546f-455e-4e1a-a573-a3bc2f67376d}</UniqueIdentifier> <UniqueIdentifier>{c1fe1744-e6d9-4c5c-be8b-5b2347353ab8}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Header Files"> <Filter Include="SSLCore\Header Files">
<UniqueIdentifier>{638d5b17-b31a-4098-b5b7-470de82e277a}</UniqueIdentifier> <UniqueIdentifier>{2f2343c8-3c13-49ca-91ed-382baba58367}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Source Files"> <Filter Include="SSLCore\Source Files">
<UniqueIdentifier>{de4d9d23-f9a1-491c-bd3c-1d37f8845ee1}</UniqueIdentifier> <UniqueIdentifier>{6d45d521-67ca-4546-84a5-8b8385c4a1c3}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{d9ee32a4-f0c7-4d1e-8344-1ffd9c1745fd}</UniqueIdentifier> <UniqueIdentifier>{0ab4e088-578b-4b65-8da4-dd9c33b6a4e9}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{e8ae7926-f411-461a-b627-360af6a8b1bf}</UniqueIdentifier> <UniqueIdentifier>{6ddc4761-6f7f-45e8-b0cf-0169275534a0}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{7a5cf97e-bb7d-4662-97ee-31d6fed6e8a3}</UniqueIdentifier> <UniqueIdentifier>{6816061c-9eb0-4f26-acf0-92a30bf7259b}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets"> <Filter Include="SSLSockets">
<UniqueIdentifier>{91703e48-b778-4064-a20d-df4595897583}</UniqueIdentifier> <UniqueIdentifier>{5f9ddbfa-da6d-4d68-8da5-a72d253cdcdf}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Header Files"> <Filter Include="SSLSockets\Header Files">
<UniqueIdentifier>{b4dbb8a6-d678-4c0c-a3b4-395fc4aab16b}</UniqueIdentifier> <UniqueIdentifier>{e1cbafc0-08f6-4e0d-aed0-4fb386f40f0a}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Source Files"> <Filter Include="SSLSockets\Source Files">
<UniqueIdentifier>{d382d85c-e1df-4322-ad02-cbd0323770e9}</UniqueIdentifier> <UniqueIdentifier>{3e5225b0-3762-4b81-80a2-d8d49bdb2f10}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail"> <Filter Include="Mail">
<UniqueIdentifier>{3d19aa58-55ce-4758-b698-a1e2d6a9e74f}</UniqueIdentifier> <UniqueIdentifier>{2fd53551-b4f1-44b4-9c1a-3df0edeab5b4}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Header Files"> <Filter Include="Mail\Header Files">
<UniqueIdentifier>{a6ab1613-a6fa-489f-8876-fe1c9cc97c25}</UniqueIdentifier> <UniqueIdentifier>{44b74a3e-b34b-47b9-bcfc-eff9bd98188f}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Source Files"> <Filter Include="Mail\Source Files">
<UniqueIdentifier>{be51cadc-28b4-4870-a6a0-28c1ba034e92}</UniqueIdentifier> <UniqueIdentifier>{eee868f5-3208-4572-b2c8-0cd20a4f2729}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{8be759e7-a7a4-443d-862b-71de0092bb33}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{9a809479-bb66-4ae6-9b51-5e4a5da04e19}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{e4f50cad-0f11-4c1f-b2d1-f21c58e67ccd}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -123,6 +132,12 @@
<ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h"> <ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h">
<Filter>Mail\Header Files</Filter> <Filter>Mail\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\AcceptCertificateHandler.cpp"> <ClCompile Include="src\AcceptCertificateHandler.cpp">
@@ -206,6 +221,12 @@
<ClCompile Include="src\SecureSMTPClientSession.cpp"> <ClCompile Include="src\SecureSMTPClientSession.cpp">
<Filter>Mail\Source Files</Filter> <Filter>Mail\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" /> <ResourceCompile Include="..\DLLVersion.rc" />

View File

@@ -551,6 +551,8 @@
<ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/> <ClInclude Include="include\Poco\Net\CertificateHandlerFactoryMgr.h"/>
<ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/> <ClInclude Include="include\Poco\Net\ConsoleCertificateHandler.h"/>
<ClInclude Include="include\Poco\Net\Context.h"/> <ClInclude Include="include\Poco\Net\Context.h"/>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h"/>
<ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/> <ClInclude Include="include\Poco\Net\HTTPSClientSession.h"/>
<ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/> <ClInclude Include="include\Poco\Net\HTTPSSessionInstantiator.h"/>
<ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/> <ClInclude Include="include\Poco\Net\HTTPSStreamFactory.h"/>
@@ -591,6 +593,12 @@
<ClCompile Include="src\Context.cpp"> <ClCompile Include="src\Context.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSession.cpp"> <ClCompile Include="src\HTTPSClientSession.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,40 +2,49 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="SSLCore"> <Filter Include="SSLCore">
<UniqueIdentifier>{fdc2240b-109f-49d7-9794-84ab73d05500}</UniqueIdentifier> <UniqueIdentifier>{a907450a-b497-4e1f-a21c-94a99e197c2d}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Header Files"> <Filter Include="SSLCore\Header Files">
<UniqueIdentifier>{dcb66a89-b9e9-4ee7-980c-5caa41ab7ac1}</UniqueIdentifier> <UniqueIdentifier>{93918e37-d134-42d7-b345-2e60ab41e1f9}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLCore\Source Files"> <Filter Include="SSLCore\Source Files">
<UniqueIdentifier>{0a85a8c0-7a92-444d-8fe6-c182ee114801}</UniqueIdentifier> <UniqueIdentifier>{0a1bfd58-52a7-4c7d-b55d-4ed2d505056b}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{e1002520-3277-44a4-9714-763d0e21f190}</UniqueIdentifier> <UniqueIdentifier>{9d771387-7041-4c75-acd4-3ba1a7ee1159}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{f5048737-45f0-4bf1-96ef-17f6ec7a7766}</UniqueIdentifier> <UniqueIdentifier>{10a12d98-5377-4052-816a-c0b51bedcff2}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{30e164e8-e5b5-409b-8c91-b12f4eae7956}</UniqueIdentifier> <UniqueIdentifier>{15231b28-83ac-4cf7-9fd5-21e3332f7850}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets"> <Filter Include="SSLSockets">
<UniqueIdentifier>{ab3907d8-a18a-44ea-8451-6aa653cc13c6}</UniqueIdentifier> <UniqueIdentifier>{c9510bba-ee39-4c5b-ab65-f5e007511540}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Header Files"> <Filter Include="SSLSockets\Header Files">
<UniqueIdentifier>{565a72c9-dfca-402c-99ab-ee4cd2eec84e}</UniqueIdentifier> <UniqueIdentifier>{313c058b-29ad-47dd-92ca-549a23920413}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="SSLSockets\Source Files"> <Filter Include="SSLSockets\Source Files">
<UniqueIdentifier>{e6595db0-64a7-4113-af28-5d99476da61f}</UniqueIdentifier> <UniqueIdentifier>{0fa5153c-28be-4dbc-893f-d9d12147e0f4}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail"> <Filter Include="Mail">
<UniqueIdentifier>{8ef93808-3e6f-4313-ae88-23e3700aa8cd}</UniqueIdentifier> <UniqueIdentifier>{1c539a87-3151-4667-a766-db7a0eac4f0d}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Header Files"> <Filter Include="Mail\Header Files">
<UniqueIdentifier>{1c9fd929-cb33-4b26-b2ac-afe9883f3c49}</UniqueIdentifier> <UniqueIdentifier>{42493a3a-e40e-4ec0-829f-1b79acbe5156}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Mail\Source Files"> <Filter Include="Mail\Source Files">
<UniqueIdentifier>{557d048d-afd8-49ec-a95c-5cb05be4debf}</UniqueIdentifier> <UniqueIdentifier>{e4e19c42-5e42-4e8e-a19d-bf13dcabdeb1}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{ec69f65f-615a-4c71-86b4-9f2a78c07ecf}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{c710847c-203f-4940-901b-942d666967f6}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{24844a06-9949-446f-99cb-bdeed264e2cb}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -123,6 +132,12 @@
<ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h"> <ClInclude Include="include\Poco\Net\SecureSMTPClientSession.h">
<Filter>Mail\Header Files</Filter> <Filter>Mail\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="include\Poco\Net\FTPSClientSession.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\FTPSStreamFactory.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\AcceptCertificateHandler.cpp"> <ClCompile Include="src\AcceptCertificateHandler.cpp">
@@ -206,6 +221,12 @@
<ClCompile Include="src\SecureSMTPClientSession.cpp"> <ClCompile Include="src\SecureSMTPClientSession.cpp">
<Filter>Mail\Source Files</Filter> <Filter>Mail\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSession.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSStreamFactory.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" /> <ResourceCompile Include="..\DLLVersion.rc" />

View File

@@ -761,23 +761,37 @@
</File> </File>
</Filter> </Filter>
</Filter> </Filter>
<Filter
Name="FTPSClient"
>
<Filter
Name="Header Files"
>
<File
RelativePath=".\include\Poco\Net\FTPSClientSession.h"
>
</File>
<File
RelativePath=".\include\Poco\Net\FTPSStreamFactory.h"
>
</File>
</Filter>
<Filter
Name="Source Files"
>
<File
RelativePath=".\src\FTPSClientSession.cpp"
>
</File>
<File
RelativePath=".\src\FTPSStreamFactory.cpp"
>
</File>
</Filter>
</Filter>
<File <File
RelativePath="..\DLLVersion.rc" RelativePath="..\DLLVersion.rc"
> >
<FileConfiguration
Name="debug_shared|Win32"
>
<Tool
Name="VCResourceCompilerTool"
/>
</FileConfiguration>
<FileConfiguration
Name="release_shared|Win32"
>
<Tool
Name="VCResourceCompilerTool"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="debug_static_mt|Win32" Name="debug_static_mt|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"

View File

@@ -0,0 +1,101 @@
//
// FTPSClientSession.h
//
// Library: NetSSL_OpenSSL
// Package: FTPS
// Module: FTPSClientSession
//
// Definition of the FTPSClientSession class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef NetSSL_FTPSClientSession_INCLUDED
#define NetSSL_FTPSClientSession_INCLUDED
#include "Poco/Net/NetSSL.h"
#include "Poco/Net/Context.h"
#include "Poco/Net/FTPClientSession.h"
namespace Poco {
namespace Net {
class NetSSL_API FTPSClientSession: public Poco::Net::FTPClientSession
/// This is an extension of FTPClientSession that supports
/// FTP over SSL/TLS using the AUTH SSL/AUTH TLS and PBSZ/PROT
/// commands according to RFC 4217.
{
public:
FTPSClientSession();
/// Creates an FTPSClientSession.
///
/// Passive mode will be used for data transfers.
explicit FTPSClientSession(Context::Ptr pContext);
/// Creates an FTPSClientSession using the given Context.
///
/// Passive mode will be used for data transfers.
FTPSClientSession(const StreamSocket& socket, bool readWelcomeMessage = true, bool enableFTPS = true, Context::Ptr pContext = nullptr);
/// Creates an FTPSClientSession using the given
/// connected socket for the control connection.
///
/// Passive mode will be used for data transfers.
FTPSClientSession(const std::string& host, Poco::UInt16 port = FTP_PORT, const std::string& username = "", const std::string& password = "", Context::Ptr pContext = nullptr);
/// Creates an FTPSClientSession using a socket connected
/// to the given host and port. If username is supplied,
/// login is attempted.
///
/// Passive mode will be used for data transfers.
virtual ~FTPSClientSession();
void enableFTPS(bool enable = true);
/// Enable or disable FTPS (FTP over SSL/TLS).
bool isSecure() const;
/// Returns true if the session is FTPS.
protected:
virtual StreamSocket establishDataConnection(const std::string& command, const std::string& arg);
/// Create secure data connection
virtual void receiveServerReadyReply();
/// Function that read server welcome message after connetion and set and make secure socket
private:
void beforeCreateDataSocket();
///Send commands to check if we can encrypt data socket
void afterCreateControlSocket();
///Send commands to make SSL negotiating of control channel
bool _enableFTPS = true;
bool _secureDataConnection = false;
Context::Ptr _pContext;
};
//
// inlines
//
inline bool FTPSClientSession::isSecure() const
{
if (_pControlSocket != nullptr)
return _pControlSocket->secure();
return false;
}
} } // namespace Poco::Net
#endif // #define NetSSL_FTPSClientSession_INCLUDED

View File

@@ -0,0 +1,74 @@
//
// FTPSStreamFactory.h
//
// Library: NetSSL_OpenSSL
// Package: FTPS
// Module: FTPSStreamFactory
//
// Definition of the FTPSStreamFactory class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_FTPSStreamFactory_INCLUDED
#define Net_FTPSStreamFactory_INCLUDED
#include "Poco/Net/NetSSL.h"
#include "Poco/Net/HTTPSession.h"
#include "Poco/Net/FTPStreamFactory.h"
namespace Poco {
namespace Net {
class NetSSL_API FTPSStreamFactory: public Poco::Net::FTPStreamFactory
/// An implementation of the URIStreamFactory interface
/// that handles secure File Transfer Protocol (ftps) URIs
/// according to RFC 4217, based on the FTPSClientSession class.
///
/// The URI's path may end with an optional type specification
/// in the form (;type=<typecode>), where <typecode> is
/// one of a, i or d. If type=a, the file identified by the path
/// is transferred in ASCII (text) mode. If type=i, the file
/// is transferred in Image (binary) mode. If type=d, a directory
/// listing (in NLST format) is returned. This corresponds with
/// the FTP URL format specified in RFC 1738.
///
/// If the URI does not contain a username and password, the
/// username "anonymous" and the password "poco@localhost".
///
/// Note that ftps is a non-standard URI scheme.
{
public:
FTPSStreamFactory();
/// Creates the FTPSStreamFactory.
~FTPSStreamFactory();
/// Destroys the FTPSStreamFactory.
std::istream* open(const Poco::URI& uri);
/// Creates and opens a HTTP stream for the given URI.
/// The URI must be a ftps://... URI.
///
/// Throws a NetException if anything goes wrong.
static void registerFactory();
/// Registers the FTPSStreamFactory with the
/// default URIStreamOpener instance.
static void unregisterFactory();
/// Unregisters the FTPSStreamFactory with the
/// default URIStreamOpener instance.
};
} } // namespace Poco::Net
#endif // Net_FTPSStreamFactory_INCLUDED

View File

@@ -19,6 +19,7 @@
#include "Poco/Net/HTTPStreamFactory.h" #include "Poco/Net/HTTPStreamFactory.h"
#include "Poco/Net/HTTPSStreamFactory.h" #include "Poco/Net/HTTPSStreamFactory.h"
#include "Poco/Net/FTPStreamFactory.h" #include "Poco/Net/FTPStreamFactory.h"
#include "Poco/Net/FTPSStreamFactory.h"
#include "Poco/Net/SSLManager.h" #include "Poco/Net/SSLManager.h"
#include "Poco/Net/KeyConsoleHandler.h" #include "Poco/Net/KeyConsoleHandler.h"
#include "Poco/Net/ConsoleCertificateHandler.h" #include "Poco/Net/ConsoleCertificateHandler.h"
@@ -35,6 +36,7 @@ using Poco::Exception;
using Poco::Net::HTTPStreamFactory; using Poco::Net::HTTPStreamFactory;
using Poco::Net::HTTPSStreamFactory; using Poco::Net::HTTPSStreamFactory;
using Poco::Net::FTPStreamFactory; using Poco::Net::FTPStreamFactory;
using Poco::Net::FTPSStreamFactory;
using Poco::Net::SSLManager; using Poco::Net::SSLManager;
using Poco::Net::Context; using Poco::Net::Context;
using Poco::Net::KeyConsoleHandler; using Poco::Net::KeyConsoleHandler;
@@ -64,6 +66,7 @@ int main(int argc, char** argv)
HTTPStreamFactory::registerFactory(); HTTPStreamFactory::registerFactory();
HTTPSStreamFactory::registerFactory(); HTTPSStreamFactory::registerFactory();
FTPStreamFactory::registerFactory(); FTPStreamFactory::registerFactory();
FTPSStreamFactory::registerFactory();
if (argc != 2) if (argc != 2)
{ {

View File

@@ -0,0 +1,143 @@
//
// FTPSClientSession.cpp
//
// Library: NetSSL_OpenSSL
// Package: FTPS
// Module: FTPSClientSession
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/Net/FTPSClientSession.h"
#include "Poco/Net/SecureStreamSocket.h"
#include "Poco/Net/SecureStreamSocketImpl.h"
#include "Poco/Net/SSLManager.h"
#include "Poco/Net/NetException.h"
namespace Poco {
namespace Net {
FTPSClientSession::FTPSClientSession():
FTPClientSession()
{
}
FTPSClientSession::FTPSClientSession(Context::Ptr pContext):
FTPClientSession(),
_pContext(pContext)
{
}
FTPSClientSession::FTPSClientSession(const StreamSocket& socket, bool readWelcomeMessage, bool enableFTPS, Context::Ptr pContext):
FTPClientSession(socket, readWelcomeMessage),
_enableFTPS(enableFTPS),
_pContext(pContext)
{
}
FTPSClientSession::FTPSClientSession(const std::string& host, Poco::UInt16 port, const std::string& username, const std::string& password, Context::Ptr pContext):
FTPClientSession(host, port, username, password),
_pContext(pContext)
{
}
FTPSClientSession::~FTPSClientSession()
{
}
void FTPSClientSession::enableFTPS(bool enable)
{
_enableFTPS = enable;
}
void FTPSClientSession::beforeCreateDataSocket()
{
if (_secureDataConnection) return;
_secureDataConnection = false;
if (!_pControlSocket->secure()) return;
std::string sResponse;
int status = sendCommand("PBSZ 0", sResponse);
if (isPositiveCompletion(status))
{
status = sendCommand("PROT P", sResponse);
if (isPositiveCompletion(status))
{
_secureDataConnection = true;
}
}
}
void FTPSClientSession::afterCreateControlSocket()
{
if (!_enableFTPS) return;
_pControlSocket->setNoDelay(true);
if (_pControlSocket->secure()) return;
std::string sResponse;
int status = sendCommand("AUTH TLS", sResponse);
if (!isPositiveCompletion(status))
status = sendCommand("AUTH SSL", sResponse);
if (isPositiveCompletion(status))
{
// Server support FTPS
try
{
if (!_pContext) _pContext = Poco::Net::SSLManager::instance().defaultClientContext();
Poco::Net::SecureStreamSocket sss(Poco::Net::SecureStreamSocket::attach(*_pControlSocket, _pContext));
*_pControlSocket = sss;
}
catch (Poco::Exception&)
{
throw;
}
}
else
{
_enableFTPS = false;
}
}
StreamSocket FTPSClientSession::establishDataConnection(const std::string& command, const std::string& arg)
{
beforeCreateDataSocket();
StreamSocket ss = FTPClientSession::establishDataConnection(command, arg);
ss.setNoDelay(true);
// SSL nogotiating of data socket
if (_secureDataConnection && _pControlSocket->secure())
{
// We need to reuse the control socket SSL session so the server can ensure that client that opened control socket is the same using data socket
Poco::Net::SecureStreamSocketImpl* pSecure = dynamic_cast<Poco::Net::SecureStreamSocketImpl*>(_pControlSocket->impl());
if (pSecure != nullptr)
{
Poco::Net::SecureStreamSocket sss(Poco::Net::SecureStreamSocket::attach(ss, pSecure->context(), pSecure->currentSession()));
ss = sss;
}
}
return ss;
}
void FTPSClientSession::receiveServerReadyReply()
{
FTPClientSession::receiveServerReadyReply();
afterCreateControlSocket();
}
} } // namespace Poco::Net

View File

@@ -0,0 +1,161 @@
//
// FTPSStreamFactory.cpp
//
// Library: NetSSL_OpenSSL
// Package: FTPS
// Module: FTPSStreamFactory
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/Net/FTPSStreamFactory.h"
#include "Poco/Net/FTPSClientSession.h"
#include "Poco/Net/NetException.h"
#include "Poco/URI.h"
#include "Poco/URIStreamOpener.h"
#include "Poco/UnbufferedStreamBuf.h"
#include "Poco/Path.h"
using Poco::URIStreamFactory;
using Poco::URI;
using Poco::URIStreamOpener;
using Poco::UnbufferedStreamBuf;
using Poco::Path;
namespace Poco {
namespace Net {
class FTPSStreamBuf: public UnbufferedStreamBuf
{
public:
FTPSStreamBuf(std::istream& istr):
_istr(istr)
{
// make sure exceptions from underlying string propagate
_istr.exceptions(std::ios::badbit);
}
~FTPSStreamBuf()
{
}
private:
int readFromDevice()
{
return _istr.get();
}
std::istream& _istr;
};
class FTPSIOS: public virtual std::ios
{
public:
FTPSIOS(std::istream& istr):
_buf(istr)
{
poco_ios_init(&_buf);
}
~FTPSIOS()
{
}
FTPSStreamBuf* rdbuf()
{
return &_buf;
}
protected:
FTPSStreamBuf _buf;
};
class FTPSStream: public FTPSIOS, public std::istream
{
public:
FTPSStream(std::istream& istr, FTPSClientSession* pSession):
FTPSIOS(istr),
std::istream(&_buf),
_pSession(pSession)
{
}
~FTPSStream()
{
delete _pSession;
}
private:
FTPSClientSession* _pSession;
};
FTPSStreamFactory::FTPSStreamFactory()
{
}
FTPSStreamFactory::~FTPSStreamFactory()
{
}
std::istream* FTPSStreamFactory::open(const URI& uri)
{
poco_assert (uri.getScheme() == "ftps");
Poco::UInt16 port = uri.getPort();
if (port == 0) port = FTPClientSession::FTP_PORT;
FTPSClientSession* pSession = new FTPSClientSession(uri.getHost(), port);
try
{
std::string username;
std::string password;
getUserInfo(uri, username, password);
std::string path;
char type;
getPathAndType(uri, path, type);
pSession->login(username, password);
if (type == 'a')
pSession->setFileType(FTPClientSession::TYPE_TEXT);
Path p(path, Path::PATH_UNIX);
p.makeFile();
for (int i = 0; i < p.depth(); ++i)
pSession->setWorkingDirectory(p[i]);
std::string file(p.getFileName());
std::istream& istr = (type == 'd' ? pSession->beginList(file) : pSession->beginDownload(file));
return new FTPSStream(istr, pSession);
}
catch (...)
{
delete pSession;
throw;
}
}
void FTPSStreamFactory::registerFactory()
{
URIStreamOpener::defaultOpener().registerStreamFactory("ftps", new FTPSStreamFactory);
}
void FTPSStreamFactory::unregisterFactory()
{
URIStreamOpener::defaultOpener().unregisterStreamFactory("ftps");
}
} } // namespace Poco::Net

View File

@@ -20,7 +20,8 @@ endif
objects = NetSSLTestSuite Driver \ objects = NetSSLTestSuite Driver \
HTTPSClientSessionTest HTTPSClientTestSuite HTTPSServerTest HTTPSServerTestSuite \ HTTPSClientSessionTest HTTPSClientTestSuite HTTPSServerTest HTTPSServerTestSuite \
HTTPSStreamFactoryTest HTTPSTestServer TCPServerTest TCPServerTestSuite \ HTTPSStreamFactoryTest HTTPSTestServer TCPServerTest TCPServerTestSuite \
WebSocketTest WebSocketTestSuite WebSocketTest WebSocketTestSuite FTPSClientSessionTest FTPSClientTestSuite \
DialogServer
target = testrunner target = testrunner
target_version = 1 target_version = 1

View File

@@ -598,6 +598,9 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\DialogServer.h"/>
<ClInclude Include="src\FTPSClientSessionTest.h"/>
<ClInclude Include="src\FTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSClientSessionTest.h"/> <ClInclude Include="src\HTTPSClientSessionTest.h"/>
<ClInclude Include="src\HTTPSClientTestSuite.h"/> <ClInclude Include="src\HTTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSServerTest.h"/> <ClInclude Include="src\HTTPSServerTest.h"/>
@@ -611,9 +614,18 @@
<ClInclude Include="src\WebSocketTestSuite.h"/> <ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\DialogServer.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\Driver.cpp"> <ClCompile Include="src\Driver.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSessionTest.cpp"> <ClCompile Include="src\HTTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,64 +2,73 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="HTTPS"> <Filter Include="HTTPS">
<UniqueIdentifier>{846e4a5d-b0cc-4266-9719-689933c197da}</UniqueIdentifier> <UniqueIdentifier>{c6547b89-6860-4137-a672-37e448c436a9}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Header Files"> <Filter Include="HTTPS\Header Files">
<UniqueIdentifier>{6a8a9378-129e-4bab-b488-f7b181e88bb4}</UniqueIdentifier> <UniqueIdentifier>{9922b686-f467-4944-916a-110e95983510}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Source Files"> <Filter Include="HTTPS\Source Files">
<UniqueIdentifier>{f76de951-2eb2-436c-a7ce-563ddbad4616}</UniqueIdentifier> <UniqueIdentifier>{8411c793-1723-459c-85a2-5f0bfb0ea6d5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite"> <Filter Include="_Suite">
<UniqueIdentifier>{589ed19a-a6d6-49a1-8c51-ad939360f2b6}</UniqueIdentifier> <UniqueIdentifier>{00b22986-6a4f-492f-bbb9-af93419c11e1}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Header Files"> <Filter Include="_Suite\Header Files">
<UniqueIdentifier>{700574d2-bacd-4825-9909-05ceb3840310}</UniqueIdentifier> <UniqueIdentifier>{48742a87-7ee8-4cdd-bd1b-190cd49e1bdc}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Source Files"> <Filter Include="_Suite\Source Files">
<UniqueIdentifier>{b9bd9b82-9c9b-4712-96ff-367aac5246f4}</UniqueIdentifier> <UniqueIdentifier>{8a1d69f1-ebbb-4fb5-b4ee-e146a9409434}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver"> <Filter Include="_Driver">
<UniqueIdentifier>{fd01befb-c10a-4b4f-9383-032472003298}</UniqueIdentifier> <UniqueIdentifier>{96ee466b-e599-47dc-81fa-09af15bd1a11}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver\Source Files"> <Filter Include="_Driver\Source Files">
<UniqueIdentifier>{def634fb-5af9-4e62-8e27-53c86fbd87c5}</UniqueIdentifier> <UniqueIdentifier>{aa5e42ab-1db8-4ce6-a05b-898ecafcb072}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer"> <Filter Include="TCPServer">
<UniqueIdentifier>{61468a62-4980-42c3-ae87-50ec0804b6ad}</UniqueIdentifier> <UniqueIdentifier>{3a31ff9a-47ff-4c1d-af72-8585cdffee41}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Header Files"> <Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{af7325c9-0e80-47b0-8c3a-20bf984eabde}</UniqueIdentifier> <UniqueIdentifier>{bd8f9bdf-27d8-41d0-9153-57b60fd78dfb}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Source Files"> <Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{5668c465-1bd8-434b-bf6c-c7450953c905}</UniqueIdentifier> <UniqueIdentifier>{0e6c338b-237e-4ba4-a4d8-d7ed4c124c09}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer"> <Filter Include="HTTPSServer">
<UniqueIdentifier>{b13c3160-5a0f-4a56-9530-19bb216bda50}</UniqueIdentifier> <UniqueIdentifier>{0edcd961-107d-472d-8c2d-572dcb826bea}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Header Files"> <Filter Include="HTTPSServer\Header Files">
<UniqueIdentifier>{68648587-4ba8-4483-8fe7-5d44f9655131}</UniqueIdentifier> <UniqueIdentifier>{ec2d6581-c268-46c0-8d2b-7896cf207f49}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Source Files"> <Filter Include="HTTPSServer\Source Files">
<UniqueIdentifier>{ec3c8566-0f74-431f-9a9a-625bcaf030a8}</UniqueIdentifier> <UniqueIdentifier>{77d8ee17-7b43-45ed-86bc-504ba591a85b}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{0928e4e6-47c8-445a-be51-19e74ea764c5}</UniqueIdentifier> <UniqueIdentifier>{7722cdda-5ea6-4cd0-9d27-380adefc9355}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{6895fa87-85a2-40f5-822c-86298f4068c2}</UniqueIdentifier> <UniqueIdentifier>{d9814a6f-7743-4f28-967d-10b81f33f62c}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{cdbf5ae2-2c80-47dd-ac34-b49ebff2b00c}</UniqueIdentifier> <UniqueIdentifier>{e01d1795-a972-4ddb-8a3e-71cd7d4b1a4a}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket"> <Filter Include="WebSocket">
<UniqueIdentifier>{3d1ae820-082a-485a-ab2e-00dd7ea965d1}</UniqueIdentifier> <UniqueIdentifier>{3e4f5f38-34e9-4107-8b3a-c1dcb36efbae}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Header Files"> <Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{dd22c880-6b1f-4745-912c-f8e3868bba48}</UniqueIdentifier> <UniqueIdentifier>{cbabee5b-4c50-4a71-844c-56bb47c8c1bd}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Source Files"> <Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{477b6333-4a39-4c91-be58-dc1f645c37fd}</UniqueIdentifier> <UniqueIdentifier>{d73ed15d-80a5-4323-bb9d-08e98f7594b0}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{999c2140-033b-479b-94cd-bec6f46ca093}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{8abcb35f-c8da-4c11-adf9-0632d87ecb7b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{f704361d-028c-45d4-9e90-fe87a7471b67}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -90,11 +99,20 @@
<ClInclude Include="src\HTTPSStreamFactoryTest.h"> <ClInclude Include="src\HTTPSStreamFactoryTest.h">
<Filter>HTTPSClient\Header Files</Filter> <Filter>HTTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h">
<Filter>WebSocket\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\WebSocketTestSuite.h"> <ClInclude Include="src\WebSocketTestSuite.h">
<Filter>WebSocket\Header Files</Filter> <Filter>WebSocket\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h"> <ClInclude Include="src\DialogServer.h">
<Filter>WebSocket\Header Files</Filter> <Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientSessionTest.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientTestSuite.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -128,11 +146,20 @@
<ClCompile Include="src\HTTPSStreamFactoryTest.cpp"> <ClCompile Include="src\HTTPSStreamFactoryTest.cpp">
<Filter>HTTPSClient\Source Files</Filter> <Filter>HTTPSClient\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\WebSocketTest.cpp"> <ClCompile Include="src\WebSocketTest.cpp">
<Filter>WebSocket\Source Files</Filter> <Filter>WebSocket\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\DialogServer.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -598,6 +598,9 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\DialogServer.h"/>
<ClInclude Include="src\FTPSClientSessionTest.h"/>
<ClInclude Include="src\FTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSClientSessionTest.h"/> <ClInclude Include="src\HTTPSClientSessionTest.h"/>
<ClInclude Include="src\HTTPSClientTestSuite.h"/> <ClInclude Include="src\HTTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSServerTest.h"/> <ClInclude Include="src\HTTPSServerTest.h"/>
@@ -611,9 +614,18 @@
<ClInclude Include="src\WebSocketTestSuite.h"/> <ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\DialogServer.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\Driver.cpp"> <ClCompile Include="src\Driver.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSessionTest.cpp"> <ClCompile Include="src\HTTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,64 +2,73 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="HTTPS"> <Filter Include="HTTPS">
<UniqueIdentifier>{7da80850-8f95-4cac-8d9a-fd45beeb6b3b}</UniqueIdentifier> <UniqueIdentifier>{01dc05f6-66a5-4110-9a48-e7c5183ab097}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Header Files"> <Filter Include="HTTPS\Header Files">
<UniqueIdentifier>{52a6f3d3-8701-4afb-a6d5-aac3721c192a}</UniqueIdentifier> <UniqueIdentifier>{6d38d9b2-74eb-462a-91ac-acf9984929f2}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Source Files"> <Filter Include="HTTPS\Source Files">
<UniqueIdentifier>{26c56db8-d340-4f40-b74e-91eb6d5a732a}</UniqueIdentifier> <UniqueIdentifier>{761bfbd9-ea4f-4606-a78c-a70578986452}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite"> <Filter Include="_Suite">
<UniqueIdentifier>{6754b60f-da69-498a-83f8-0592418cd121}</UniqueIdentifier> <UniqueIdentifier>{0dd1e2bd-2f57-4125-a224-67a8a337b4a8}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Header Files"> <Filter Include="_Suite\Header Files">
<UniqueIdentifier>{6a5bccc4-e1ad-4778-a7bd-ca97aec3a3fd}</UniqueIdentifier> <UniqueIdentifier>{4010adba-7b7a-43d5-88d6-1eb9fcb6b135}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Source Files"> <Filter Include="_Suite\Source Files">
<UniqueIdentifier>{a3810368-bf30-4d9b-a3a4-b72c26433b85}</UniqueIdentifier> <UniqueIdentifier>{908da2b2-3f86-4944-b959-5c7ecddad517}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver"> <Filter Include="_Driver">
<UniqueIdentifier>{b76eefd7-2b80-4cba-93fe-6304918de063}</UniqueIdentifier> <UniqueIdentifier>{b9247cc0-77eb-4553-9141-ac7894e741a9}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver\Source Files"> <Filter Include="_Driver\Source Files">
<UniqueIdentifier>{232acb96-ad00-4fc5-98ee-961d9d15dc0f}</UniqueIdentifier> <UniqueIdentifier>{41417e99-1541-4bd3-96da-5d0282ca819d}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer"> <Filter Include="TCPServer">
<UniqueIdentifier>{2b8b80cf-1711-4b0a-a123-2e9753e2f9ff}</UniqueIdentifier> <UniqueIdentifier>{e40c88c1-c25c-4db0-a4da-8b719bb05a72}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Header Files"> <Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{8df04fb5-81fb-4364-85cf-a728c7c07128}</UniqueIdentifier> <UniqueIdentifier>{1dca29f6-e62d-4ef2-93e6-dfbb1fa68bb5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Source Files"> <Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{16d7a0b8-3f6a-4172-909e-f1062bc008db}</UniqueIdentifier> <UniqueIdentifier>{bbd8ae8f-0f7f-4b2e-b823-6205bef6bdc9}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer"> <Filter Include="HTTPSServer">
<UniqueIdentifier>{f4db8d5c-7046-40d3-9911-ad9ff764b167}</UniqueIdentifier> <UniqueIdentifier>{d0c42b60-d859-4c29-9a2f-d1a2a945de6a}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Header Files"> <Filter Include="HTTPSServer\Header Files">
<UniqueIdentifier>{2b039122-32d1-483d-9af2-5c9bc41c8f3f}</UniqueIdentifier> <UniqueIdentifier>{121d433d-a9e5-4880-86ae-a6dcd38af9bb}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Source Files"> <Filter Include="HTTPSServer\Source Files">
<UniqueIdentifier>{c4405010-434d-483b-90d4-966010e572b0}</UniqueIdentifier> <UniqueIdentifier>{65e44aaa-f448-44d0-8c3f-d64c37f7748c}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{9a7c4e30-eee6-4da2-b758-b98a90732e5a}</UniqueIdentifier> <UniqueIdentifier>{f664e993-d511-45ca-91f0-e9c9cb8bf7aa}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{9731e8cb-8bd1-40ce-8de5-814dc69a2467}</UniqueIdentifier> <UniqueIdentifier>{27dd46aa-5898-49e4-ad5a-2c1dd7de3e5c}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{95f6ce9b-76ce-451d-8bb6-6a700fb77136}</UniqueIdentifier> <UniqueIdentifier>{32a1145e-6233-4cad-9449-ce036097c6c7}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket"> <Filter Include="WebSocket">
<UniqueIdentifier>{6857b522-f6ea-4466-be12-1e6000496a18}</UniqueIdentifier> <UniqueIdentifier>{6ca77063-6539-45d2-b1cc-c2e4f03b7d17}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Header Files"> <Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{ae31d541-b671-4f2e-af86-158db96fe7a3}</UniqueIdentifier> <UniqueIdentifier>{a197d8c6-61b2-4b3b-9146-47719205e6b0}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Source Files"> <Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{6783003f-c0e8-4a50-aae0-d939df1534e3}</UniqueIdentifier> <UniqueIdentifier>{1f8fc7ac-627e-4f7a-a7b3-0200c93f0e23}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{88f10ec6-5da0-4c2a-88ea-16308c0bdff2}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{f66ad590-a092-40d6-a48d-18818240730a}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{b9cbc9b2-7ed3-40c5-9df5-983ce2b2e7b4}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -90,11 +99,20 @@
<ClInclude Include="src\HTTPSStreamFactoryTest.h"> <ClInclude Include="src\HTTPSStreamFactoryTest.h">
<Filter>HTTPSClient\Header Files</Filter> <Filter>HTTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h">
<Filter>WebSocket\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\WebSocketTestSuite.h"> <ClInclude Include="src\WebSocketTestSuite.h">
<Filter>WebSocket\Header Files</Filter> <Filter>WebSocket\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h"> <ClInclude Include="src\DialogServer.h">
<Filter>WebSocket\Header Files</Filter> <Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientSessionTest.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientTestSuite.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -128,11 +146,20 @@
<ClCompile Include="src\HTTPSStreamFactoryTest.cpp"> <ClCompile Include="src\HTTPSStreamFactoryTest.cpp">
<Filter>HTTPSClient\Source Files</Filter> <Filter>HTTPSClient\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\WebSocketTest.cpp"> <ClCompile Include="src\WebSocketTest.cpp">
<Filter>WebSocket\Source Files</Filter> <Filter>WebSocket\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\DialogServer.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -598,6 +598,9 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\DialogServer.h"/>
<ClInclude Include="src\FTPSClientSessionTest.h"/>
<ClInclude Include="src\FTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSClientSessionTest.h"/> <ClInclude Include="src\HTTPSClientSessionTest.h"/>
<ClInclude Include="src\HTTPSClientTestSuite.h"/> <ClInclude Include="src\HTTPSClientTestSuite.h"/>
<ClInclude Include="src\HTTPSServerTest.h"/> <ClInclude Include="src\HTTPSServerTest.h"/>
@@ -611,9 +614,18 @@
<ClInclude Include="src\WebSocketTestSuite.h"/> <ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\DialogServer.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\Driver.cpp"> <ClCompile Include="src\Driver.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<ClCompile Include="src\HTTPSClientSessionTest.cpp"> <ClCompile Include="src\HTTPSClientSessionTest.cpp">
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile> </ClCompile>

View File

@@ -2,64 +2,73 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="HTTPS"> <Filter Include="HTTPS">
<UniqueIdentifier>{a065d5fa-8594-4a26-8c66-ff19397b3803}</UniqueIdentifier> <UniqueIdentifier>{3d8c275d-898d-4ba7-82a8-15956f876dd6}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Header Files"> <Filter Include="HTTPS\Header Files">
<UniqueIdentifier>{f2a3a562-f84b-43d5-8a98-145c632e36ce}</UniqueIdentifier> <UniqueIdentifier>{dfdeb6fb-7755-4bc8-aad2-f0c57d4cd444}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPS\Source Files"> <Filter Include="HTTPS\Source Files">
<UniqueIdentifier>{07ba12d8-f71d-4c60-92ce-43aef9ba7742}</UniqueIdentifier> <UniqueIdentifier>{d105f4d4-8c6e-4f81-9e52-edbe585a6198}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite"> <Filter Include="_Suite">
<UniqueIdentifier>{112ac5c2-2914-4796-8c7a-506b196dc613}</UniqueIdentifier> <UniqueIdentifier>{a961dcb0-a773-4fd8-bf76-47143c6e7bdd}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Header Files"> <Filter Include="_Suite\Header Files">
<UniqueIdentifier>{f4b7430a-2047-4e0f-87e0-21a5bd5fc0aa}</UniqueIdentifier> <UniqueIdentifier>{13197bee-9e15-436e-9e9e-57a492a491ec}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Suite\Source Files"> <Filter Include="_Suite\Source Files">
<UniqueIdentifier>{b32386db-8f9a-410f-907b-2fb3fb4c8639}</UniqueIdentifier> <UniqueIdentifier>{8003e38f-00bd-4ed8-bab2-61897a705707}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver"> <Filter Include="_Driver">
<UniqueIdentifier>{e80186a3-d7aa-4539-ad73-4cadea7df758}</UniqueIdentifier> <UniqueIdentifier>{45f6628f-f268-4b55-8045-9f4a460b495b}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="_Driver\Source Files"> <Filter Include="_Driver\Source Files">
<UniqueIdentifier>{56589647-c44b-4e0e-a6db-e15215cd8fa6}</UniqueIdentifier> <UniqueIdentifier>{db6f4d23-4457-4d18-a456-fffcff8008bf}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer"> <Filter Include="TCPServer">
<UniqueIdentifier>{5262bd41-0fe9-469e-84c6-4c9c027fedc4}</UniqueIdentifier> <UniqueIdentifier>{c4b2b6c1-5035-4c36-879c-f2a029c82dd5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Header Files"> <Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{f493be55-2b0d-4597-9225-4599937f4572}</UniqueIdentifier> <UniqueIdentifier>{5b55cd6b-f15b-4980-be1c-7e00756867c2}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="TCPServer\Source Files"> <Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{7add8e72-a36a-4c27-b9f4-f9261ba0b857}</UniqueIdentifier> <UniqueIdentifier>{e6e773be-05b7-4469-b8c0-0d1c02ef1af3}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer"> <Filter Include="HTTPSServer">
<UniqueIdentifier>{c2a70ed3-9822-48c6-9c5f-6f2114061522}</UniqueIdentifier> <UniqueIdentifier>{6a0e39b3-eb47-4c43-a7be-aa4ff14c68a5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Header Files"> <Filter Include="HTTPSServer\Header Files">
<UniqueIdentifier>{402827c6-3af4-4732-af34-a7cca2ed7bea}</UniqueIdentifier> <UniqueIdentifier>{bf42b915-19db-4692-b49d-3896e573a7d1}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSServer\Source Files"> <Filter Include="HTTPSServer\Source Files">
<UniqueIdentifier>{fa38bc3a-03ce-4b8d-81ca-8eb856f13b5d}</UniqueIdentifier> <UniqueIdentifier>{354f8da0-26b7-4d36-b915-a67561235b2d}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient"> <Filter Include="HTTPSClient">
<UniqueIdentifier>{6e1d8ca4-80fb-40e4-b401-b8fd1a95e996}</UniqueIdentifier> <UniqueIdentifier>{62f97349-a37a-403a-9d32-886672a6f9ac}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Header Files"> <Filter Include="HTTPSClient\Header Files">
<UniqueIdentifier>{016dd120-6dd9-434c-b5ec-2c85bcfaabe2}</UniqueIdentifier> <UniqueIdentifier>{f1a8189c-ed81-48f3-b1c6-bec5d6678f95}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="HTTPSClient\Source Files"> <Filter Include="HTTPSClient\Source Files">
<UniqueIdentifier>{64d42661-8f2e-4a72-bfe5-2cb07df554ab}</UniqueIdentifier> <UniqueIdentifier>{77d7e4a1-0101-42c7-8735-cf7c3f033264}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket"> <Filter Include="WebSocket">
<UniqueIdentifier>{a437ae7a-17d2-431d-86f4-f47596fdf2e4}</UniqueIdentifier> <UniqueIdentifier>{4a241e53-67d0-4462-99fa-6236a8685ef5}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Header Files"> <Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{5e248dc9-4df5-4523-b9ae-dd1dd3a37fcb}</UniqueIdentifier> <UniqueIdentifier>{dc8e5a3d-06bc-42e6-89aa-acc155aecb60}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="WebSocket\Source Files"> <Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{6ebca91a-0a8e-4d6b-97d0-acfe9736401e}</UniqueIdentifier> <UniqueIdentifier>{e95e2b01-d2b6-42c2-9fe3-9ff0ec26fbb6}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient">
<UniqueIdentifier>{3cc4affd-a6a0-41e4-a88d-68f8dcba1332}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Header Files">
<UniqueIdentifier>{407782c2-dffa-44cc-8f49-384014f68fec}</UniqueIdentifier>
</Filter>
<Filter Include="FTPSClient\Source Files">
<UniqueIdentifier>{93fa4aa6-9241-4d80-9000-9c9aa10ca383}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -90,11 +99,20 @@
<ClInclude Include="src\HTTPSStreamFactoryTest.h"> <ClInclude Include="src\HTTPSStreamFactoryTest.h">
<Filter>HTTPSClient\Header Files</Filter> <Filter>HTTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h">
<Filter>WebSocket\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\WebSocketTestSuite.h"> <ClInclude Include="src\WebSocketTestSuite.h">
<Filter>WebSocket\Header Files</Filter> <Filter>WebSocket\Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\WebSocketTest.h"> <ClInclude Include="src\DialogServer.h">
<Filter>WebSocket\Header Files</Filter> <Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientSessionTest.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\FTPSClientTestSuite.h">
<Filter>FTPSClient\Header Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -128,11 +146,20 @@
<ClCompile Include="src\HTTPSStreamFactoryTest.cpp"> <ClCompile Include="src\HTTPSStreamFactoryTest.cpp">
<Filter>HTTPSClient\Source Files</Filter> <Filter>HTTPSClient\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\WebSocketTest.cpp"> <ClCompile Include="src\WebSocketTest.cpp">
<Filter>WebSocket\Source Files</Filter> <Filter>WebSocket\Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\WebSocketTestSuite.cpp">
<Filter>WebSocket\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\DialogServer.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientSessionTest.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\FTPSClientTestSuite.cpp">
<Filter>FTPSClient\Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject <VisualStudioProject
Name="TestSuite"
Version="9.00"
ProjectType="Visual C++" ProjectType="Visual C++"
Version="9.00"
Name="TestSuite"
ProjectGUID="{B2B88092-5BCE-4AC0-941E-88167138B4A7}" ProjectGUID="{B2B88092-5BCE-4AC0-941E-88167138B4A7}"
RootNamespace="TestSuite" RootNamespace="TestSuite"
Keyword="Win32Proj"> Keyword="Win32Proj"
TargetFrameworkVersion="0"
>
<Platforms> <Platforms>
<Platform <Platform
Name="Win32"/> Name="Win32"
/>
</Platforms> </Platforms>
<ToolFiles/> <ToolFiles>
</ToolFiles>
<Configurations> <Configurations>
<Configuration <Configuration
Name="debug_shared|Win32" Name="debug_shared|Win32"
@@ -18,19 +22,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="0" Optimization="0"
AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include" AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;"
@@ -48,39 +59,50 @@
DebugInformationFormat="3" DebugInformationFormat="3"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="ws2_32.lib iphlpapi.lib" AdditionalDependencies="ws2_32.lib iphlpapi.lib"
OutputFile="bin\TestSuited.exe" OutputFile="bin\TestSuited.exe"
LinkIncremental="2" LinkIncremental="2"
AdditionalLibraryDirectories="..\..\lib"
SuppressStartupBanner="true" SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\lib"
GenerateDebugInformation="true" GenerateDebugInformation="true"
ProgramDatabaseFile="bin\TestSuited.pdb" ProgramDatabaseFile="bin\TestSuited.pdb"
SubSystem="1" SubSystem="1"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="release_shared|Win32" Name="release_shared|Win32"
@@ -88,19 +110,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="4" Optimization="4"
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
EnableIntrinsicFunctions="true" EnableIntrinsicFunctions="true"
@@ -120,15 +149,19 @@
DebugInformationFormat="0" DebugInformationFormat="0"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="ws2_32.lib iphlpapi.lib" AdditionalDependencies="ws2_32.lib iphlpapi.lib"
OutputFile="bin\TestSuite.exe" OutputFile="bin\TestSuite.exe"
LinkIncremental="1" LinkIncremental="1"
@@ -138,21 +171,28 @@
OptimizeReferences="2" OptimizeReferences="2"
EnableCOMDATFolding="2" EnableCOMDATFolding="2"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="debug_static_mt|Win32" Name="debug_static_mt|Win32"
@@ -160,19 +200,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="4" Optimization="4"
AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include" AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;POCO_STATIC;" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;POCO_STATIC;"
@@ -190,40 +237,51 @@
DebugInformationFormat="3" DebugInformationFormat="3"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib" AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib"
OutputFile="bin\static_mt\TestSuited.exe" OutputFile="bin\static_mt\TestSuited.exe"
LinkIncremental="2" LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\lib" AdditionalLibraryDirectories="..\..\lib"
IgnoreDefaultLibraryNames="nafxcwd.lib" IgnoreDefaultLibraryNames="nafxcwd.lib"
SuppressStartupBanner="true"
GenerateDebugInformation="true" GenerateDebugInformation="true"
ProgramDatabaseFile="bin\static_mt\TestSuited.pdb" ProgramDatabaseFile="bin\static_mt\TestSuited.pdb"
SubSystem="1" SubSystem="1"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="release_static_mt|Win32" Name="release_static_mt|Win32"
@@ -231,19 +289,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="4" Optimization="4"
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
EnableIntrinsicFunctions="true" EnableIntrinsicFunctions="true"
@@ -263,15 +328,19 @@
DebugInformationFormat="0" DebugInformationFormat="0"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib" AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib"
OutputFile="bin\static_mt\TestSuite.exe" OutputFile="bin\static_mt\TestSuite.exe"
LinkIncremental="1" LinkIncremental="1"
@@ -282,21 +351,28 @@
OptimizeReferences="2" OptimizeReferences="2"
EnableCOMDATFolding="2" EnableCOMDATFolding="2"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="debug_static_md|Win32" Name="debug_static_md|Win32"
@@ -304,19 +380,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="4" Optimization="4"
AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include" AdditionalIncludeDirectories="..\include;..\..\CppUnit\include;..\..\openssl\build\include;..\..\Foundation\include;..\..\XML\include;..\..\Util\include;..\..\Net\include;..\..\Crypto\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;POCO_STATIC;" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WINVER=0x0501;POCO_STATIC;"
@@ -334,39 +417,50 @@
DebugInformationFormat="3" DebugInformationFormat="3"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib" AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib"
OutputFile="bin\static_md\TestSuited.exe" OutputFile="bin\static_md\TestSuited.exe"
LinkIncremental="2" LinkIncremental="2"
AdditionalLibraryDirectories="..\..\lib"
SuppressStartupBanner="true" SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\lib"
GenerateDebugInformation="true" GenerateDebugInformation="true"
ProgramDatabaseFile="bin\static_md\TestSuited.pdb" ProgramDatabaseFile="bin\static_md\TestSuited.pdb"
SubSystem="1" SubSystem="1"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="release_static_md|Win32" Name="release_static_md|Win32"
@@ -374,19 +468,26 @@
IntermediateDirectory="obj\$(ConfigurationName)" IntermediateDirectory="obj\$(ConfigurationName)"
ConfigurationType="1" ConfigurationType="1"
UseOfMFC="0" UseOfMFC="0"
CharacterSet="2"> CharacterSet="2"
>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"
/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"
/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"
/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"
/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"
/>
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions=""
Optimization="4" Optimization="4"
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
EnableIntrinsicFunctions="true" EnableIntrinsicFunctions="true"
@@ -406,15 +507,19 @@
DebugInformationFormat="0" DebugInformationFormat="0"
CompileAs="0" CompileAs="0"
DisableSpecificWarnings="" DisableSpecificWarnings=""
AdditionalOptions=""/> />
<Tool <Tool
Name="VCManagedResourceCompilerTool"/> Name="VCManagedResourceCompilerTool"
/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"
/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"
/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions=""
AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib" AdditionalDependencies="Crypt32.lib ws2_32.lib iphlpapi.lib"
OutputFile="bin\static_md\TestSuite.exe" OutputFile="bin\static_md\TestSuite.exe"
LinkIncremental="1" LinkIncremental="1"
@@ -424,131 +529,242 @@
OptimizeReferences="2" OptimizeReferences="2"
EnableCOMDATFolding="2" EnableCOMDATFolding="2"
TargetMachine="1" TargetMachine="1"
AdditionalOptions=""/> />
<Tool <Tool
Name="VCALinkTool"/> Name="VCALinkTool"
/>
<Tool <Tool
Name="VCManifestTool"/> Name="VCManifestTool"
/>
<Tool <Tool
Name="VCXDCMakeTool"/> Name="VCXDCMakeTool"
/>
<Tool <Tool
Name="VCBscMakeTool"/> Name="VCBscMakeTool"
/>
<Tool <Tool
Name="VCFxCopTool"/> Name="VCFxCopTool"
/>
<Tool <Tool
Name="VCAppVerifierTool"/> Name="VCAppVerifierTool"
/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"
/>
</Configuration> </Configuration>
</Configurations> </Configurations>
<References/> <References>
</References>
<Files> <Files>
<Filter <Filter
Name="HTTPS"> Name="HTTPS"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\HTTPSTestServer.h"/> RelativePath=".\src\HTTPSTestServer.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\HTTPSTestServer.cpp"/> RelativePath=".\src\HTTPSTestServer.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="_Suite"> Name="_Suite"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\NetSSLTestSuite.h"/> RelativePath=".\src\NetSSLTestSuite.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\NetSSLTestSuite.cpp"/> RelativePath=".\src\NetSSLTestSuite.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="_Driver"> Name="_Driver"
>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\Driver.cpp"/> RelativePath=".\src\Driver.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="TCPServer"> Name="TCPServer"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\TCPServerTest.h"/> RelativePath=".\src\TCPServerTest.h"
>
</File>
<File <File
RelativePath=".\src\TCPServerTestSuite.h"/> RelativePath=".\src\TCPServerTestSuite.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\TCPServerTest.cpp"/> RelativePath=".\src\TCPServerTest.cpp"
>
</File>
<File <File
RelativePath=".\src\TCPServerTestSuite.cpp"/> RelativePath=".\src\TCPServerTestSuite.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="HTTPSServer"> Name="HTTPSServer"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\HTTPSServerTest.h"/> RelativePath=".\src\HTTPSServerTest.h"
>
</File>
<File <File
RelativePath=".\src\HTTPSServerTestSuite.h"/> RelativePath=".\src\HTTPSServerTestSuite.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\HTTPSServerTest.cpp"/> RelativePath=".\src\HTTPSServerTest.cpp"
>
</File>
<File <File
RelativePath=".\src\HTTPSServerTestSuite.cpp"/> RelativePath=".\src\HTTPSServerTestSuite.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="HTTPSClient"> Name="HTTPSClient"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\HTTPSClientSessionTest.h"/> RelativePath=".\src\HTTPSClientSessionTest.h"
>
</File>
<File <File
RelativePath=".\src\HTTPSClientTestSuite.h"/> RelativePath=".\src\HTTPSClientTestSuite.h"
>
</File>
<File <File
RelativePath=".\src\HTTPSStreamFactoryTest.h"/> RelativePath=".\src\HTTPSStreamFactoryTest.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\HTTPSClientSessionTest.cpp"/> RelativePath=".\src\HTTPSClientSessionTest.cpp"
>
</File>
<File <File
RelativePath=".\src\HTTPSClientTestSuite.cpp"/> RelativePath=".\src\HTTPSClientTestSuite.cpp"
>
</File>
<File <File
RelativePath=".\src\HTTPSStreamFactoryTest.cpp"/> RelativePath=".\src\HTTPSStreamFactoryTest.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
Name="WebSocket"> Name="WebSocket"
>
<Filter <Filter
Name="Header Files"> Name="Header Files"
>
<File <File
RelativePath=".\src\WebSocketTestSuite.h"/> RelativePath=".\src\WebSocketTest.h"
>
</File>
<File <File
RelativePath=".\src\WebSocketTest.h"/> RelativePath=".\src\WebSocketTestSuite.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files"> Name="Source Files"
>
<File <File
RelativePath=".\src\WebSocketTestSuite.cpp"/> RelativePath=".\src\WebSocketTest.cpp"
>
</File>
<File <File
RelativePath=".\src\WebSocketTest.cpp"/> RelativePath=".\src\WebSocketTestSuite.cpp"
>
</File>
</Filter>
</Filter>
<Filter
Name="FTPSClient"
>
<Filter
Name="Header Files"
>
<File
RelativePath=".\src\DialogServer.h"
>
</File>
<File
RelativePath=".\src\FTPSClientSessionTest.h"
>
</File>
<File
RelativePath=".\src\FTPSClientTestSuite.h"
>
</File>
</Filter>
<Filter
Name="Source Files"
>
<File
RelativePath=".\src\DialogServer.cpp"
>
</File>
<File
RelativePath=".\src\FTPSClientSessionTest.cpp"
>
</File>
<File
RelativePath=".\src\FTPSClientTestSuite.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
</Files> </Files>
<Globals/> <Globals>
</Globals>
</VisualStudioProject> </VisualStudioProject>

View File

@@ -0,0 +1,262 @@
//
// DialogServer.cpp
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "DialogServer.h"
#include "Poco/Net/DialogSocket.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Timespan.h"
#include <iostream>
#include "Poco/Net/SecureStreamSocket.h"
#include "Poco/Net/SSLManager.h"
#include "Poco/Net/Context.h"
#include "Poco/Net/SecureStreamSocketImpl.h"
using Poco::Net::Socket;
using Poco::Net::DialogSocket;
using Poco::Net::SocketAddress;
using Poco::FastMutex;
using Poco::Thread;
using Poco::Net::SecureStreamSocket;
using Poco::Net::SSLManager;
using Poco::Exception;
using Poco::Net::Context;
using Poco::Net::Session;
using Poco::Net::SecureStreamSocketImpl;
DialogServer::DialogServer(bool acceptCommands, bool ssl):
_socket(SocketAddress()),
_thread("DialogServer"),
_stop(false),
_acceptCommands(acceptCommands),
_log(false),
_ssl(ssl)
{
_thread.start(*this);
_ready.wait();
}
DialogServer::~DialogServer()
{
_stop = true;
_thread.join();
}
Poco::UInt16 DialogServer::port() const
{
return _socket.address().port();
}
void handleDataSSLrequest(DialogSocket& ds, bool ssl, Session::Ptr& sslSession)
{
if (ssl)
{
try
{
Context::Ptr cDefaultServerContext = SSLManager::instance().defaultServerContext();
SecureStreamSocket sss(SecureStreamSocket::attach(ds, cDefaultServerContext, sslSession));
sss.setLazyHandshake(true);
if (sss.completeHandshake() == 1)
{
ds = sss;
}
}
catch (Exception& exc)
{
std::cout << exc.displayText() << std::endl;
}
}
}
void handleSSLrequest(DialogSocket& ds, bool ssl, Session::Ptr& sslSession)
{
if (ssl)
{
try
{
Context::Ptr cDefaultServerContext = SSLManager::instance().defaultServerContext();
ds.sendMessage("200 OK");
SecureStreamSocket sss(SecureStreamSocket::attach(ds, cDefaultServerContext));
sss.setLazyHandshake(true);
if (sss.completeHandshake() == 1)
{
ds = sss;
SecureStreamSocketImpl* pSecure = dynamic_cast<SecureStreamSocketImpl*>(sss.impl());
if (pSecure != nullptr)
sslSession = pSecure->currentSession();
}
else
{
ds.sendMessage("501 Explicit TLS authentication not available");
}
}
catch (Exception&) {
ds.sendMessage("501 Explicit TLS authentication not available");
}
}
else
{
ds.sendMessage("501 Explicit TLS authentication not available");
}
}
void DialogServer::run()
{
_ready.set();
Poco::Timespan span(250000);
while (!_stop)
{
if (_socket.poll(span, Socket::SELECT_READ))
{
DialogSocket ds = _socket.acceptConnection();
if (!_SSLsession.isNull()) {
handleDataSSLrequest(ds, _ssl, _SSLsession);
}
{
FastMutex::ScopedLock lock(_mutex);
if (!_nextResponses.empty())
{
ds.sendMessage(_nextResponses.front());
_nextResponses.erase(_nextResponses.begin());
}
}
if (_acceptCommands)
{
try
{
std::string command;
while (ds.receiveMessage(command))
{
if ((command == "AUTH TLS") || (command == "AUTH SSL"))
{
handleSSLrequest(ds, _ssl, _SSLsession);
continue;
}
else if ((command == "PBSZ 0") || (command == "PROT P"))
{
ds.sendMessage("200 OK");
continue;
}
if (_log) std::cout << ">> " << command << std::endl;
{
FastMutex::ScopedLock lock(_mutex);
_lastCommands.push_back(command);
if (!_nextResponses.empty())
{
if (_log) std::cout << "<< " << _nextResponses.front() << std::endl;
ds.sendMessage(_nextResponses.front());
_nextResponses.erase(_nextResponses.begin());
}
}
}
}
catch (Poco::Exception& exc)
{
std::cerr << "DialogServer: " << exc.displayText() << std::endl;
}
}
}
}
}
const std::string& DialogServer::lastCommand() const
{
FastMutex::ScopedLock lock(_mutex);
static const std::string EMPTY;
if (_lastCommands.empty())
return EMPTY;
else
return _lastCommands.back();
}
const std::vector<std::string>& DialogServer::lastCommands() const
{
return _lastCommands;
}
std::string DialogServer::popCommand()
{
FastMutex::ScopedLock lock(_mutex);
std::string command;
if (!_lastCommands.empty())
{
command = _lastCommands.front();
_lastCommands.erase(_lastCommands.begin());
}
return command;
}
std::string DialogServer::popCommandWait()
{
std::string result(popCommand());
while (result.empty())
{
Thread::sleep(100);
result = popCommand();
}
return result;
}
void DialogServer::addResponse(const std::string& response)
{
FastMutex::ScopedLock lock(_mutex);
_nextResponses.push_back(response);
}
void DialogServer::clearCommands()
{
FastMutex::ScopedLock lock(_mutex);
_lastCommands.clear();
}
void DialogServer::clearResponses()
{
FastMutex::ScopedLock lock(_mutex);
_nextResponses.clear();
}
void DialogServer::log(bool flag)
{
_log = flag;
}
void DialogServer::setSslSession(Session::Ptr cSession)
{
_SSLsession = cSession;
}
Session::Ptr DialogServer::getSslSession()
{
return _SSLsession;
}

View File

@@ -0,0 +1,87 @@
//
// DialogServer.h
//
// Definition of the DialogServer class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef DialogServer_INCLUDED
#define DialogServer_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Thread.h"
#include "Poco/Event.h"
#include "Poco/Mutex.h"
#include <vector>
#include "Poco/Net/Session.h"
class DialogServer: public Poco::Runnable
/// A server for testing FTPClientSession and friends.
{
public:
DialogServer(bool acceptCommands = true, bool ssl = false);
/// Creates the DialogServer.
~DialogServer();
/// Destroys the DialogServer.
Poco::UInt16 port() const;
/// Returns the port the echo server is
/// listening on.
void run();
/// Does the work.
const std::string& lastCommand() const;
/// Returns the last command received by the server.
std::string popCommand();
/// Pops the next command from the list of received commands.
std::string popCommandWait();
/// Pops the next command from the list of received commands.
/// Waits until a command is available.
const std::vector<std::string>& lastCommands() const;
/// Returns the last command received by the server.
void addResponse(const std::string& response);
/// Sets the next response returned by the server.
void clearCommands();
/// Clears all commands.
void clearResponses();
/// Clears all responses.
void log(bool flag);
/// Enables or disables logging to stdout.
Poco::Net::Session::Ptr getSslSession();
void setSslSession(Poco::Net::Session::Ptr cSession);
private:
Poco::Net::ServerSocket _socket;
Poco::Thread _thread;
Poco::Event _ready;
mutable Poco::FastMutex _mutex;
bool _stop;
std::vector<std::string> _nextResponses;
std::vector<std::string> _lastCommands;
bool _acceptCommands;
bool _log;
bool _ssl;
Poco::Net::Session::Ptr _SSLsession = nullptr;
};
#endif // DialogServer_INCLUDED

View File

@@ -0,0 +1,647 @@
//
// FTPSClientSessionTest.cpp
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "FTPSClientSessionTest.h"
#include "Poco/CppUnit/TestCaller.h"
#include "Poco/CppUnit/TestSuite.h"
#include "Poco/Net/FTPSClientSession.h"
#include "Poco/Net/DialogSocket.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/NetException.h"
#include "Poco/Thread.h"
#include "Poco/ActiveMethod.h"
#include "Poco/StreamCopier.h"
#include "Poco/Net/Session.h"
#include "DialogServer.h"
#include <sstream>
using Poco::Net::FTPSClientSession;
using Poco::Net::DialogSocket;
using Poco::Net::SocketAddress;
using Poco::Net::FTPException;
using Poco::ActiveMethod;
using Poco::ActiveResult;
using Poco::StreamCopier;
using Poco::Thread;
using Poco::Net::Session;
namespace
{
class ActiveDownloader
{
public:
ActiveDownloader(FTPSClientSession& session):
download(this, &ActiveDownloader::downloadImp),
_session(session)
{
}
ActiveMethod<std::string, std::string, ActiveDownloader> download;
protected:
std::string downloadImp(const std::string& path)
{
std::istream& istr = _session.beginDownload(path);
std::ostringstream ostr;
StreamCopier::copyStream(istr, ostr);
_session.endDownload();
return ostr.str();
}
private:
FTPSClientSession& _session;
};
};
FTPSClientSessionTest::FTPSClientSessionTest(const std::string& name): CppUnit::TestCase(name)
{
}
FTPSClientSessionTest::~FTPSClientSessionTest()
{
}
void FTPSClientSessionTest::login(DialogServer& server, FTPSClientSession& session)
{
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
session.login("user", "password");
std::string cmd = server.popCommand();
assertTrue (cmd == "USER user");
cmd = server.popCommand();
assertTrue (cmd == "PASS password");
cmd = server.popCommand();
assertTrue (cmd == "TYPE I");
assertTrue (session.getFileType() == FTPSClientSession::TYPE_BINARY);
}
void FTPSClientSessionTest::testLogin1()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
FTPSClientSession session("127.0.0.1", server.port());
assertTrue (session.isOpen());
assertTrue (!session.isLoggedIn());
login(server, session);
assertTrue (session.isOpen());
assertTrue (session.isLoggedIn());
server.addResponse("221 Good Bye");
session.logout();
assertTrue (session.isOpen());
assertTrue (!session.isLoggedIn());
server.clearCommands();
server.clearResponses();
session.enableFTPS(true);
login(server, session);
assertTrue (session.isOpen());
assertTrue (session.isLoggedIn());
server.addResponse("221 Good Bye");
session.close();
assertTrue (!session.isOpen());
assertTrue (!session.isLoggedIn());
}
void FTPSClientSessionTest::testLogin2()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
Poco::UInt16 serverPort = server.port();
FTPSClientSession session("127.0.0.1", serverPort, "user", "password");
assertTrue (session.isOpen());
assertTrue (session.isLoggedIn());
server.addResponse("221 Good Bye");
session.close();
assertTrue (!session.isOpen());
assertTrue (!session.isLoggedIn());
server.clearCommands();
server.clearResponses();
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
session.enableFTPS(true);
session.open("127.0.0.1", serverPort, "user", "password");
assertTrue (session.isOpen());
assertTrue (session.isLoggedIn());
server.addResponse("221 Good Bye");
session.close();
assertTrue (!session.isOpen());
assertTrue (!session.isLoggedIn());
}
void FTPSClientSessionTest::testLogin3()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session;
assertTrue (!session.isOpen());
assertTrue (!session.isLoggedIn());
session.open("127.0.0.1", server.port(), "user", "password");
server.addResponse("221 Good Bye");
session.close();
assertTrue (!session.isOpen());
assertTrue (!session.isLoggedIn());
}
void FTPSClientSessionTest::testLoginFailed1()
{
DialogServer server;
server.addResponse("421 localhost FTP not ready");
FTPSClientSession session("127.0.0.1", server.port());
try
{
session.login("user", "password");
fail("server not ready - must throw");
}
catch (FTPException&)
{
}
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testLoginFailed2()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("530 Login incorrect");
FTPSClientSession session("127.0.0.1", server.port());
try
{
session.login("user", "password");
fail("login incorrect - must throw");
}
catch (FTPException&)
{
}
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testCommands()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
std::string cmd = server.popCommand();
assertTrue (cmd == "USER user");
cmd = server.popCommand();
assertTrue (cmd == "PASS password");
cmd = server.popCommand();
assertTrue (cmd == "TYPE I");
// systemType
server.clearCommands();
server.addResponse("215 UNIX Type: L8 Version: dummyFTP 1.0");
std::string type = session.systemType();
cmd = server.popCommand();
assertTrue (cmd == "SYST");
assertTrue (type == "UNIX Type: L8 Version: dummyFTP 1.0");
// getWorkingDirectory
server.addResponse("257 \"/usr/test\" is current directory");
std::string cwd = session.getWorkingDirectory();
cmd = server.popCommand();
assertTrue (cmd == "PWD");
assertTrue (cwd == "/usr/test");
// getWorkingDirectory (quotes in filename)
server.addResponse("257 \"\"\"quote\"\"\" is current directory");
cwd = session.getWorkingDirectory();
cmd = server.popCommand();
assertTrue (cmd == "PWD");
assertTrue (cwd == "\"quote\"");
// setWorkingDirectory
server.addResponse("250 CWD OK");
session.setWorkingDirectory("test");
cmd = server.popCommand();
assertTrue (cmd == "CWD test");
server.addResponse("250 CDUP OK");
session.cdup();
cmd = server.popCommand();
assertTrue (cmd == "CDUP");
// rename
server.addResponse("350 File exists, send destination name");
server.addResponse("250 Rename OK");
session.rename("old.txt", "new.txt");
cmd = server.popCommand();
assertTrue (cmd == "RNFR old.txt");
cmd = server.popCommand();
assertTrue (cmd == "RNTO new.txt");
// rename (failing)
server.addResponse("550 not found");
try
{
session.rename("old.txt", "new.txt");
fail("not found - must throw");
}
catch (FTPException&)
{
}
server.clearCommands();
// remove
server.addResponse("250 delete ok");
session.remove("test.txt");
cmd = server.popCommand();
assertTrue (cmd == "DELE test.txt");
// remove (failing)
server.addResponse("550 not found");
try
{
session.remove("test.txt");
fail("not found - must throw");
}
catch (FTPException&)
{
}
server.clearCommands();
// createDirectory
server.addResponse("257 dir created");
session.createDirectory("foo");
cmd = server.popCommand();
assertTrue (cmd == "MKD foo");
// createDirectory (failing)
server.addResponse("550 exists");
try
{
session.createDirectory("foo");
fail("not found - must throw");
}
catch (FTPException&)
{
}
server.clearCommands();
// removeDirectory
server.addResponse("250 RMD OK");
session.removeDirectory("foo");
cmd = server.popCommand();
assertTrue (cmd == "RMD foo");
// removeDirectory (failing)
server.addResponse("550 not found");
try
{
session.removeDirectory("foo");
fail("not found - must throw");
}
catch (FTPException&)
{
}
server.clearCommands();
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testDownloadPORT()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.setPassive(false);
session.login("user", "password");
server.clearCommands();
server.addResponse("500 EPRT not understood");
server.addResponse("200 PORT OK");
server.addResponse("150 Sending data\r\n226 Transfer complete");
ActiveDownloader dl(session);
ActiveResult<std::string> result = dl.download("test.txt");
std::string cmd = server.popCommandWait();
assertTrue (cmd.substr(0, 4) == "EPRT");
cmd = server.popCommandWait();
assertTrue (cmd.substr(0, 4) == "PORT");
std::string dummy;
int x, lo, hi;
for (std::string::iterator it = cmd.begin(); it != cmd.end(); ++it)
{
if (*it == ',') *it = ' ';
}
std::istringstream istr(cmd);
istr >> dummy >> x >> x >> x >> x >> hi >> lo;
int port = hi*256 + lo;
cmd = server.popCommandWait();
assertTrue (cmd == "RETR test.txt");
SocketAddress sa("127.0.0.1", (Poco::UInt16) port);
DialogSocket dataSock;
dataSock.connect(sa);
std::string data("This is some data");
dataSock.sendString(data);
dataSock.close();
result.wait();
std::string received = result.data();
assertTrue (received == data);
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testDownloadEPRT()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.setPassive(false);
session.login("user", "password");
server.clearCommands();
server.addResponse("200 EPRT OK");
server.addResponse("150 Sending data\r\n226 Transfer complete");
ActiveDownloader dl(session);
ActiveResult<std::string> result = dl.download("test.txt");
std::string cmd = server.popCommandWait();
assertTrue (cmd.substr(0, 4) == "EPRT");
std::string dummy;
char c;
int d;
int port;
std::istringstream istr(cmd);
istr >> dummy >> c >> d >> c >> d >> c >> d >> c >> d >> c >> d >> c >> port >> c;
cmd = server.popCommandWait();
assertTrue (cmd == "RETR test.txt");
SocketAddress sa("127.0.0.1", (Poco::UInt16) port);
DialogSocket dataSock;
dataSock.connect(sa);
std::string data("This is some data");
dataSock.sendString(data);
dataSock.close();
result.wait();
std::string received = result.data();
assertTrue (received == data);
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testDownloadPASV()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
server.clearCommands();
server.addResponse("500 EPSV not understood");
DialogServer dataServer(false);
Poco::UInt16 dataServerPort = dataServer.port();
dataServer.addResponse("This is some data");
std::ostringstream pasv;
pasv << "227 Entering Passive Mode (127,0,0,1," << (dataServerPort/256) << "," << (dataServerPort % 256) << ")";
server.addResponse(pasv.str());
server.addResponse("150 sending data\r\n226 Transfer complete");
std::istream& istr = session.beginDownload("test.txt");
std::ostringstream dataStr;
StreamCopier::copyStream(istr, dataStr);
session.endDownload();
std::string s(dataStr.str());
assertTrue (s == "This is some data\r\n");
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testDownloadEPSV()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
server.clearCommands();
DialogServer dataServer(false);
dataServer.addResponse("This is some data");
std::ostringstream epsv;
epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
server.addResponse(epsv.str());
server.addResponse("150 sending data\r\n226 Transfer complete");
std::istream& istr = session.beginDownload("test.txt");
std::ostringstream dataStr;
StreamCopier::copyStream(istr, dataStr);
session.endDownload();
std::string s(dataStr.str());
assertTrue (s == "This is some data\r\n");
std::string cmd = server.popCommand();
assertTrue (cmd.substr(0, 4) == "EPSV");
cmd = server.popCommand();
assertTrue (cmd == "RETR test.txt");
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testUpload()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
server.clearCommands();
DialogServer dataServer;
std::ostringstream epsv;
epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
server.addResponse(epsv.str());
server.addResponse("150 send data\r\n226 Transfer complete");
std::ostream& ostr = session.beginUpload("test.txt");
ostr << "This is some data\r\n";
session.endUpload();
std::string s(dataServer.popCommandWait());
assertTrue (s == "This is some data");
std::string cmd = server.popCommand();
assertTrue (cmd.substr(0, 4) == "EPSV");
cmd = server.popCommand();
assertTrue (cmd == "STOR test.txt");
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testUploadSSL()
{
DialogServer server(true, true);
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
server.clearCommands();
DialogServer dataServer(true, true);
Session::Ptr cSessionSSL = server.getSslSession();
dataServer.setSslSession(cSessionSSL);
std::ostringstream epsv;
epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
server.addResponse(epsv.str());
server.addResponse("150 send data\r\n226 Transfer complete");
std::ostream& ostr = session.beginUpload("test.txt");
ostr << "This is some data\r\n";
session.endUpload();
//std::string s(dataServer.popCommandWait());
//assertTrue (s == "This is some data");
std::string cmd = server.popCommand();
assertTrue (cmd.substr(0, 4) == "EPSV");
cmd = server.popCommand();
assertTrue (cmd == "STOR test.txt");
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::testList()
{
DialogServer server;
server.addResponse("220 localhost FTP ready");
server.addResponse("331 Password required");
server.addResponse("230 Welcome");
server.addResponse("200 Type set to I");
FTPSClientSession session("127.0.0.1", server.port());
session.login("user", "password");
server.clearCommands();
DialogServer dataServer(false);
dataServer.addResponse("file1\r\nfile2");
std::ostringstream epsv;
epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
server.addResponse(epsv.str());
server.addResponse("150 sending data\r\n226 Transfer complete");
std::istream& istr = session.beginList();
std::ostringstream dataStr;
StreamCopier::copyStream(istr, dataStr);
session.endList();
std::string s(dataStr.str());
assertTrue (s == "file1\r\nfile2\r\n");
std::string cmd = server.popCommand();
assertTrue (cmd.substr(0, 4) == "EPSV");
cmd = server.popCommand();
assertTrue (cmd == "NLST");
server.addResponse("221 Good Bye");
session.close();
}
void FTPSClientSessionTest::setUp()
{
}
void FTPSClientSessionTest::tearDown()
{
}
CppUnit::Test* FTPSClientSessionTest::suite()
{
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPSClientSessionTest");
CppUnit_addTest(pSuite, FTPSClientSessionTest, testLogin1);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testLogin2);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testLogin3);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testLoginFailed1);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testLoginFailed2);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testCommands);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testDownloadPORT);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testDownloadEPRT);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testDownloadPASV);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testDownloadEPSV);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testUpload);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testList);
CppUnit_addTest(pSuite, FTPSClientSessionTest, testUploadSSL);
return pSuite;
}

View File

@@ -0,0 +1,62 @@
//
// FTPClientSessionTest.h
//
// Definition of the FTPClientSessionTest class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef FTPClientSessionTest_INCLUDED
#define FTPClientSessionTest_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/CppUnit/TestCase.h"
namespace Poco {
namespace Net {
class FTPSClientSession;
} }
class DialogServer;
class FTPSClientSessionTest: public CppUnit::TestCase
{
public:
FTPSClientSessionTest(const std::string& name);
~FTPSClientSessionTest();
void testLogin1();
void testLogin2();
void testLogin3();
void testLoginFailed1();
void testLoginFailed2();
void testCommands();
void testDownloadPORT();
void testDownloadEPRT();
void testDownloadPASV();
void testDownloadEPSV();
void testUpload();
void testList();
void testUploadSSL();
void setUp();
void tearDown();
static CppUnit::Test* suite();
private:
void login(DialogServer& server, Poco::Net::FTPSClientSession& session);
};
#endif // FTPClientSessionTest_INCLUDED

View File

@@ -0,0 +1,22 @@
//
// FTPClientTestSuite.cpp
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "FTPSClientTestSuite.h"
#include "FTPSClientSessionTest.h"
CppUnit::Test* FTPSClientTestSuite::suite()
{
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPSClientTestSuite");
pSuite->addTest(FTPSClientSessionTest::suite());
return pSuite;
}

View File

@@ -0,0 +1,27 @@
//
// FTPClientTestSuite.h
//
// Definition of the FTPClientTestSuite class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef FTPClientTestSuite_INCLUDED
#define FTPClientTestSuite_INCLUDED
#include "Poco/CppUnit/TestSuite.h"
class FTPSClientTestSuite
{
public:
static CppUnit::Test* suite();
};
#endif // FTPClientTestSuite_INCLUDED

View File

@@ -14,6 +14,7 @@
#include "TCPServerTestSuite.h" #include "TCPServerTestSuite.h"
#include "HTTPSServerTestSuite.h" #include "HTTPSServerTestSuite.h"
#include "WebSocketTestSuite.h" #include "WebSocketTestSuite.h"
#include "FTPSClientTestSuite.h"
CppUnit::Test* NetSSLTestSuite::suite() CppUnit::Test* NetSSLTestSuite::suite()
@@ -24,6 +25,7 @@ CppUnit::Test* NetSSLTestSuite::suite()
pSuite->addTest(TCPServerTestSuite::suite()); pSuite->addTest(TCPServerTestSuite::suite());
pSuite->addTest(HTTPSServerTestSuite::suite()); pSuite->addTest(HTTPSServerTestSuite::suite());
pSuite->addTest(WebSocketTestSuite::suite()); pSuite->addTest(WebSocketTestSuite::suite());
pSuite->addTest(FTPSClientTestSuite::suite());
return pSuite; return pSuite;
} }