mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-01 17:25:03 +02:00
commit
6b65787210
@ -143,7 +143,7 @@ set(Poco_COMPONENTS "")
|
|||||||
# Pthreads/threads support
|
# Pthreads/threads support
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
if (ENABLE_TESTS)
|
if (ENABLE_TESTS OR ENABLE_CPPUNIT)
|
||||||
add_subdirectory(CppUnit)
|
add_subdirectory(CppUnit)
|
||||||
list(APPEND Poco_COMPONENTS "CppUnit")
|
list(APPEND Poco_COMPONENTS "CppUnit")
|
||||||
endif ()
|
endif ()
|
||||||
@ -182,18 +182,20 @@ if(WIN32 AND ENABLE_NETSSL_WIN)
|
|||||||
list(APPEND Poco_COMPONENTS "NetSSL_Win")
|
list(APPEND Poco_COMPONENTS "NetSSL_Win")
|
||||||
endif(WIN32 AND ENABLE_NETSSL_WIN)
|
endif(WIN32 AND ENABLE_NETSSL_WIN)
|
||||||
|
|
||||||
find_package(OpenSSL)
|
if(ENABLE_NETSSL OR ENABLE_CRYPTO)
|
||||||
if(OPENSSL_FOUND)
|
find_package(OpenSSL REQUIRED)
|
||||||
include_directories("${OPENSSL_INCLUDE_DIR}")
|
if(OPENSSL_FOUND)
|
||||||
if(ENABLE_NETSSL)
|
include_directories("${OPENSSL_INCLUDE_DIR}")
|
||||||
add_subdirectory(NetSSL_OpenSSL)
|
if(ENABLE_NETSSL)
|
||||||
list(APPEND Poco_COMPONENTS "NetSSL_OpenSSL")
|
add_subdirectory(NetSSL_OpenSSL)
|
||||||
endif()
|
list(APPEND Poco_COMPONENTS "NetSSL_OpenSSL")
|
||||||
if(ENABLE_CRYPTO)
|
endif()
|
||||||
add_subdirectory(Crypto)
|
if(ENABLE_CRYPTO)
|
||||||
list(APPEND Poco_COMPONENTS "Crypto")
|
add_subdirectory(Crypto)
|
||||||
endif()
|
list(APPEND Poco_COMPONENTS "Crypto")
|
||||||
endif(OPENSSL_FOUND)
|
endif()
|
||||||
|
endif(OPENSSL_FOUND)
|
||||||
|
endif(ENABLE_NETSSL OR ENABLE_CRYPTO)
|
||||||
|
|
||||||
if(ENABLE_DATA)
|
if(ENABLE_DATA)
|
||||||
add_subdirectory(Data)
|
add_subdirectory(Data)
|
||||||
@ -314,4 +316,3 @@ message(STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO:=${CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
|||||||
foreach(component ${Poco_COMPONENTS})
|
foreach(component ${Poco_COMPONENTS})
|
||||||
message(STATUS "Building: ${component}")
|
message(STATUS "Building: ${component}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
@ -89,7 +89,11 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TestMethod _test;
|
TestMethod _test;
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<Fixture> _fixture;
|
std::auto_ptr<Fixture> _fixture;
|
||||||
|
#else
|
||||||
|
std::unique_ptr<Fixture> _fixture;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _name;
|
std::string _name;
|
||||||
EVP_MD_CTX* _ctx;
|
EVP_MD_CTX* _pContext;
|
||||||
Poco::DigestEngine::Digest _digest;
|
Poco::DigestEngine::Digest _digest;
|
||||||
OpenSSLInitializer _openSSLInitializer;
|
OpenSSLInitializer _openSSLInitializer;
|
||||||
};
|
};
|
||||||
|
@ -77,7 +77,11 @@ namespace
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
const EVP_CIPHER* _pCipher;
|
const EVP_CIPHER* _pCipher;
|
||||||
EVP_CIPHER_CTX _ctx;
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
EVP_CIPHER_CTX* _pContext;
|
||||||
|
#else
|
||||||
|
EVP_CIPHER_CTX _context;
|
||||||
|
#endif
|
||||||
ByteVec _key;
|
ByteVec _key;
|
||||||
ByteVec _iv;
|
ByteVec _iv;
|
||||||
};
|
};
|
||||||
@ -92,30 +96,52 @@ namespace
|
|||||||
_key(key),
|
_key(key),
|
||||||
_iv(iv)
|
_iv(iv)
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
_pContext = EVP_CIPHER_CTX_new();
|
||||||
EVP_CipherInit(
|
EVP_CipherInit(
|
||||||
&_ctx,
|
_pContext,
|
||||||
_pCipher,
|
_pCipher,
|
||||||
&_key[0],
|
&_key[0],
|
||||||
_iv.empty() ? 0 : &_iv[0],
|
_iv.empty() ? 0 : &_iv[0],
|
||||||
(dir == DIR_ENCRYPT) ? 1 : 0);
|
(dir == DIR_ENCRYPT) ? 1 : 0);
|
||||||
|
#else
|
||||||
|
EVP_CipherInit(
|
||||||
|
&_context,
|
||||||
|
_pCipher,
|
||||||
|
&_key[0],
|
||||||
|
_iv.empty() ? 0 : &_iv[0],
|
||||||
|
(dir == DIR_ENCRYPT) ? 1 : 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CryptoTransformImpl::~CryptoTransformImpl()
|
CryptoTransformImpl::~CryptoTransformImpl()
|
||||||
{
|
{
|
||||||
EVP_CIPHER_CTX_cleanup(&_ctx);
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
EVP_CIPHER_CTX_cleanup(_pContext);
|
||||||
|
#else
|
||||||
|
EVP_CIPHER_CTX_cleanup(&_context);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::size_t CryptoTransformImpl::blockSize() const
|
std::size_t CryptoTransformImpl::blockSize() const
|
||||||
{
|
{
|
||||||
return EVP_CIPHER_CTX_block_size(&_ctx);
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
return EVP_CIPHER_CTX_block_size(_pContext);
|
||||||
|
#else
|
||||||
|
return EVP_CIPHER_CTX_block_size(&_context);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int CryptoTransformImpl::setPadding(int padding)
|
int CryptoTransformImpl::setPadding(int padding)
|
||||||
{
|
{
|
||||||
return EVP_CIPHER_CTX_set_padding(&_ctx, padding);
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
return EVP_CIPHER_CTX_block_size(_pContext);
|
||||||
|
#else
|
||||||
|
return EVP_CIPHER_CTX_set_padding(&_context, padding);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,13 +154,21 @@ namespace
|
|||||||
poco_assert (outputLength >= (inputLength + blockSize() - 1));
|
poco_assert (outputLength >= (inputLength + blockSize() - 1));
|
||||||
|
|
||||||
int outLen = static_cast<int>(outputLength);
|
int outLen = static_cast<int>(outputLength);
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
int rc = EVP_CipherUpdate(
|
int rc = EVP_CipherUpdate(
|
||||||
&_ctx,
|
_pContext,
|
||||||
output,
|
output,
|
||||||
&outLen,
|
&outLen,
|
||||||
input,
|
input,
|
||||||
static_cast<int>(inputLength));
|
static_cast<int>(inputLength));
|
||||||
|
#else
|
||||||
|
int rc = EVP_CipherUpdate(
|
||||||
|
&_context,
|
||||||
|
output,
|
||||||
|
&outLen,
|
||||||
|
input,
|
||||||
|
static_cast<int>(inputLength));
|
||||||
|
#endif
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
throwError();
|
throwError();
|
||||||
|
|
||||||
@ -153,7 +187,11 @@ namespace
|
|||||||
// Use the '_ex' version that does not perform implicit cleanup since we
|
// Use the '_ex' version that does not perform implicit cleanup since we
|
||||||
// will call EVP_CIPHER_CTX_cleanup() from the dtor as there is no
|
// will call EVP_CIPHER_CTX_cleanup() from the dtor as there is no
|
||||||
// guarantee that finalize() will be called if an error occurred.
|
// guarantee that finalize() will be called if an error occurred.
|
||||||
int rc = EVP_CipherFinal_ex(&_ctx, output, &len);
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
int rc = EVP_CipherFinal_ex(_pContext, output, &len);
|
||||||
|
#else
|
||||||
|
int rc = EVP_CipherFinal_ex(&_context, output, &len);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
throwError();
|
throwError();
|
||||||
|
@ -23,46 +23,51 @@ namespace Crypto {
|
|||||||
|
|
||||||
|
|
||||||
DigestEngine::DigestEngine(const std::string& name):
|
DigestEngine::DigestEngine(const std::string& name):
|
||||||
_name(name)
|
_name(name),
|
||||||
|
_pContext(EVP_MD_CTX_create())
|
||||||
{
|
{
|
||||||
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
||||||
if (!md) throw Poco::NotFoundException(_name);
|
if (!md) throw Poco::NotFoundException(_name);
|
||||||
_ctx = EVP_MD_CTX_create();
|
EVP_DigestInit_ex(_pContext, md, NULL);
|
||||||
EVP_DigestInit_ex(_ctx, md, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DigestEngine::~DigestEngine()
|
DigestEngine::~DigestEngine()
|
||||||
{
|
{
|
||||||
EVP_MD_CTX_destroy(_ctx);
|
EVP_MD_CTX_destroy(_pContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DigestEngine::nid() const
|
int DigestEngine::nid() const
|
||||||
{
|
{
|
||||||
return EVP_MD_nid(_ctx->digest);
|
return EVP_MD_nid(EVP_MD_CTX_md(_pContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t DigestEngine::digestLength() const
|
std::size_t DigestEngine::digestLength() const
|
||||||
{
|
{
|
||||||
return EVP_MD_CTX_size(_ctx);
|
return EVP_MD_CTX_size(_pContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DigestEngine::reset()
|
void DigestEngine::reset()
|
||||||
{
|
{
|
||||||
EVP_MD_CTX_cleanup(_ctx);
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
EVP_MD_CTX_free(_pContext);
|
||||||
|
_pContext = EVP_MD_CTX_create();
|
||||||
|
#else
|
||||||
|
EVP_MD_CTX_cleanup(_pContext);
|
||||||
|
#endif
|
||||||
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
const EVP_MD* md = EVP_get_digestbyname(_name.c_str());
|
||||||
if (!md) throw Poco::NotFoundException(_name);
|
if (!md) throw Poco::NotFoundException(_name);
|
||||||
EVP_DigestInit_ex(_ctx, md, NULL);
|
EVP_DigestInit_ex(_pContext, md, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Poco::DigestEngine::Digest& DigestEngine::digest()
|
const Poco::DigestEngine::Digest& DigestEngine::digest()
|
||||||
{
|
{
|
||||||
_digest.clear();
|
_digest.clear();
|
||||||
unsigned len = EVP_MD_CTX_size(_ctx);
|
unsigned len = EVP_MD_CTX_size(_pContext);
|
||||||
_digest.resize(len);
|
_digest.resize(len);
|
||||||
EVP_DigestFinal_ex(_ctx, &_digest[0], &len);
|
EVP_DigestFinal_ex(_pContext, &_digest[0], &len);
|
||||||
reset();
|
reset();
|
||||||
return _digest;
|
return _digest;
|
||||||
}
|
}
|
||||||
@ -70,7 +75,7 @@ const Poco::DigestEngine::Digest& DigestEngine::digest()
|
|||||||
|
|
||||||
void DigestEngine::updateImpl(const void* data, std::size_t length)
|
void DigestEngine::updateImpl(const void* data, std::size_t length)
|
||||||
{
|
{
|
||||||
EVP_DigestUpdate(_ctx, data, length);
|
EVP_DigestUpdate(_pContext, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -207,19 +207,43 @@ int RSAKeyImpl::size() const
|
|||||||
|
|
||||||
RSAKeyImpl::ByteVec RSAKeyImpl::modulus() const
|
RSAKeyImpl::ByteVec RSAKeyImpl::modulus() const
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
const BIGNUM* n = 0;
|
||||||
|
const BIGNUM* e = 0;
|
||||||
|
const BIGNUM* d = 0;
|
||||||
|
RSA_get0_key(_pRSA, &n, &e, &d);
|
||||||
|
return convertToByteVec(n);
|
||||||
|
#else
|
||||||
return convertToByteVec(_pRSA->n);
|
return convertToByteVec(_pRSA->n);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RSAKeyImpl::ByteVec RSAKeyImpl::encryptionExponent() const
|
RSAKeyImpl::ByteVec RSAKeyImpl::encryptionExponent() const
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
const BIGNUM* n = 0;
|
||||||
|
const BIGNUM* e = 0;
|
||||||
|
const BIGNUM* d = 0;
|
||||||
|
RSA_get0_key(_pRSA, &n, &e, &d);
|
||||||
|
return convertToByteVec(e);
|
||||||
|
#else
|
||||||
return convertToByteVec(_pRSA->e);
|
return convertToByteVec(_pRSA->e);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RSAKeyImpl::ByteVec RSAKeyImpl::decryptionExponent() const
|
RSAKeyImpl::ByteVec RSAKeyImpl::decryptionExponent() const
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
const BIGNUM* n = 0;
|
||||||
|
const BIGNUM* e = 0;
|
||||||
|
const BIGNUM* d = 0;
|
||||||
|
RSA_get0_key(_pRSA, &n, &e, &d);
|
||||||
|
return convertToByteVec(d);
|
||||||
|
#else
|
||||||
return convertToByteVec(_pRSA->d);
|
return convertToByteVec(_pRSA->d);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,7 +63,11 @@ X509Certificate::X509Certificate(X509* pCert, bool shared):
|
|||||||
|
|
||||||
if (shared)
|
if (shared)
|
||||||
{
|
{
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
X509_up_ref(_pCert);
|
||||||
|
#else
|
||||||
_pCert->references++;
|
_pCert->references++;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@ -633,7 +633,7 @@ private:
|
|||||||
(SQLUSMALLINT) pos + 1,
|
(SQLUSMALLINT) pos + 1,
|
||||||
valueType,
|
valueType,
|
||||||
(SQLPOINTER) pCache,
|
(SQLPOINTER) pCache,
|
||||||
(SQLINTEGER) size,
|
(SQLINTEGER) size*sizeof(T),
|
||||||
&_lengths[pos])))
|
&_lengths[pos])))
|
||||||
{
|
{
|
||||||
throw StatementException(_rStmt, "SQLBindCol()");
|
throw StatementException(_rStmt, "SQLBindCol()");
|
||||||
@ -1040,7 +1040,7 @@ inline void Preparator::prepare(std::size_t pos, const std::list<std::string>& v
|
|||||||
|
|
||||||
inline void Preparator::prepare(std::size_t pos, const UTF16String&)
|
inline void Preparator::prepare(std::size_t pos, const UTF16String&)
|
||||||
{
|
{
|
||||||
prepareVariableLen<UTF16String::value_type>(pos, SQL_C_WCHAR, maxDataSize(pos), DT_CHAR);
|
prepareVariableLen<UTF16String::value_type>(pos, SQL_C_WCHAR, maxDataSize(pos), DT_WCHAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,6 +88,9 @@ void ODBCMetaColumn::init()
|
|||||||
case SQL_CHAR:
|
case SQL_CHAR:
|
||||||
case SQL_VARCHAR:
|
case SQL_VARCHAR:
|
||||||
case SQL_LONGVARCHAR:
|
case SQL_LONGVARCHAR:
|
||||||
|
#ifdef SQL_GUID
|
||||||
|
case SQL_GUID:
|
||||||
|
#endif
|
||||||
setType(MetaColumn::FDT_STRING); break;
|
setType(MetaColumn::FDT_STRING); break;
|
||||||
|
|
||||||
case SQL_WCHAR:
|
case SQL_WCHAR:
|
||||||
|
@ -499,7 +499,7 @@ int ODBCStatementImpl::affectedRowCount() const
|
|||||||
{
|
{
|
||||||
if (0 == _affectedRowCount)
|
if (0 == _affectedRowCount)
|
||||||
{
|
{
|
||||||
SQLLEN rows;
|
SQLLEN rows = 0;
|
||||||
if (!Utility::isError(SQLRowCount(_stmt, &rows)))
|
if (!Utility::isError(SQLRowCount(_stmt, &rows)))
|
||||||
_affectedRowCount = static_cast<std::size_t>(rows);
|
_affectedRowCount = static_cast<std::size_t>(rows);
|
||||||
}
|
}
|
||||||
|
@ -952,7 +952,7 @@ void DataTest::testRow()
|
|||||||
row3.append("field4", 4);
|
row3.append("field4", 4);
|
||||||
|
|
||||||
assert (row3 == row);
|
assert (row3 == row);
|
||||||
assert (!(row < row3 | row3 < row));
|
assert (!(row < row3 || row3 < row));
|
||||||
|
|
||||||
Row row4(row3.names());
|
Row row4(row3.names());
|
||||||
try
|
try
|
||||||
|
@ -24,7 +24,13 @@
|
|||||||
#if POCO_OS == POCO_OS_WINDOWS_NT
|
#if POCO_OS == POCO_OS_WINDOWS_NT
|
||||||
#include "Poco/UnWindows.h"
|
#include "Poco/UnWindows.h"
|
||||||
#elif POCO_OS == POCO_OS_MAC_OS_X
|
#elif POCO_OS == POCO_OS_MAC_OS_X
|
||||||
#include <libkern/OSAtomic.h>
|
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_12 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 || __TV_OS_VERSION_MAX_ALLOWED >= __TVOS_10_0 || __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_3_0
|
||||||
|
#ifndef POCO_HAVE_STD_ATOMICS
|
||||||
|
#define POCO_HAVE_STD_ATOMICS
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <libkern/OSAtomic.h>
|
||||||
|
#endif
|
||||||
#elif ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2) || __GNUC__ > 4) && (defined(__x86_64__) || defined(__i386__))
|
#elif ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2) || __GNUC__ > 4) && (defined(__x86_64__) || defined(__i386__))
|
||||||
#if !defined(POCO_HAVE_GCC_ATOMICS) && !defined(POCO_NO_GCC_ATOMICS)
|
#if !defined(POCO_HAVE_GCC_ATOMICS) && !defined(POCO_NO_GCC_ATOMICS)
|
||||||
#define POCO_HAVE_GCC_ATOMICS
|
#define POCO_HAVE_GCC_ATOMICS
|
||||||
@ -35,6 +41,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif // POCO_OS
|
#endif // POCO_OS
|
||||||
#include "Poco/Mutex.h"
|
#include "Poco/Mutex.h"
|
||||||
|
#ifdef POCO_HAVE_STD_ATOMICS
|
||||||
|
#include <atomic>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -104,7 +113,9 @@ public:
|
|||||||
/// Returns true if the counter is zero, false otherwise.
|
/// Returns true if the counter is zero, false otherwise.
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#if POCO_OS == POCO_OS_WINDOWS_NT
|
#if defined(POCO_HAVE_STD_ATOMICS)
|
||||||
|
typedef std::atomic<int> ImplType;
|
||||||
|
#elif POCO_OS == POCO_OS_WINDOWS_NT
|
||||||
typedef volatile LONG ImplType;
|
typedef volatile LONG ImplType;
|
||||||
#elif POCO_OS == POCO_OS_MAC_OS_X
|
#elif POCO_OS == POCO_OS_MAC_OS_X
|
||||||
typedef int32_t ImplType;
|
typedef int32_t ImplType;
|
||||||
@ -127,7 +138,53 @@ private:
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#if POCO_OS == POCO_OS_WINDOWS_NT
|
#if defined(POCO_HAVE_STD_ATOMICS)
|
||||||
|
//
|
||||||
|
// C++11 atomics
|
||||||
|
//
|
||||||
|
inline AtomicCounter::operator AtomicCounter::ValueType () const
|
||||||
|
{
|
||||||
|
return _counter.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline AtomicCounter::ValueType AtomicCounter::value() const
|
||||||
|
{
|
||||||
|
return _counter.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline AtomicCounter::ValueType AtomicCounter::operator ++ () // prefix
|
||||||
|
{
|
||||||
|
return ++_counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline AtomicCounter::ValueType AtomicCounter::operator ++ (int) // postfix
|
||||||
|
{
|
||||||
|
return _counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline AtomicCounter::ValueType AtomicCounter::operator -- () // prefix
|
||||||
|
{
|
||||||
|
return --_counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline AtomicCounter::ValueType AtomicCounter::operator -- (int) // postfix
|
||||||
|
{
|
||||||
|
return _counter--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool AtomicCounter::operator ! () const
|
||||||
|
{
|
||||||
|
return _counter.load() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#elif POCO_OS == POCO_OS_WINDOWS_NT
|
||||||
//
|
//
|
||||||
// Windows
|
// Windows
|
||||||
//
|
//
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
//
|
//
|
||||||
// Feature configuration for the POCO libraries.
|
// Feature configuration for the POCO libraries.
|
||||||
//
|
//
|
||||||
// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
|
// Copyright (c) 2006-2016, Applied Informatics Software Engineering GmbH.
|
||||||
// and Contributors.
|
// and Contributors.
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
@ -93,8 +93,10 @@
|
|||||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
//
|
//
|
||||||
#ifndef POCO_NO_SOO
|
#ifndef POCO_NO_SOO
|
||||||
|
#ifndef POCO_ENABLE_SOO
|
||||||
#define POCO_NO_SOO
|
#define POCO_NO_SOO
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -168,13 +170,21 @@
|
|||||||
#define POCO_NO_LOCALE
|
#define POCO_NO_LOCALE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Enable the poco_debug_* and poco_trace_* macros
|
// Enable the poco_debug_* and poco_trace_* macros
|
||||||
// even if the _DEBUG variable is not set.
|
// even if the _DEBUG variable is not set.
|
||||||
// This allows the use of these macros in a release version.
|
// This allows the use of these macros in a release version.
|
||||||
// #define POCO_LOG_DEBUG
|
// #define POCO_LOG_DEBUG
|
||||||
|
|
||||||
|
|
||||||
// Uncomment to disable the use of bundled OpenSSL binaries
|
// Uncomment to disable the use of bundled OpenSSL binaries
|
||||||
// (Windows only)
|
// (Windows only)
|
||||||
// #define POCO_EXTERNAL_OPENSSL
|
// #define POCO_EXTERNAL_OPENSSL
|
||||||
|
|
||||||
|
|
||||||
|
// Define to prevent changing the suffix for shared libraries
|
||||||
|
// to "d.so", "d.dll", etc. for _DEBUG builds in Poco::SharedLibrary.
|
||||||
|
// #define POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX
|
||||||
|
|
||||||
|
|
||||||
#endif // Foundation_Config_INCLUDED
|
#endif // Foundation_Config_INCLUDED
|
||||||
|
@ -139,7 +139,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Foundation_API DeflatingOutputStream: public DeflatingIOS, public std::ostream
|
class Foundation_API DeflatingOutputStream: public std::ostream, public DeflatingIOS
|
||||||
/// This stream compresses all data passing through it
|
/// This stream compresses all data passing through it
|
||||||
/// using zlib's deflate algorithm.
|
/// using zlib's deflate algorithm.
|
||||||
/// After all data has been written to the stream, close()
|
/// After all data has been written to the stream, close()
|
||||||
@ -176,7 +176,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Foundation_API DeflatingInputStream: public DeflatingIOS, public std::istream
|
class Foundation_API DeflatingInputStream: public std::istream, public DeflatingIOS
|
||||||
/// This stream compresses all data passing through it
|
/// This stream compresses all data passing through it
|
||||||
/// using zlib's deflate algorithm.
|
/// using zlib's deflate algorithm.
|
||||||
{
|
{
|
||||||
|
@ -89,7 +89,11 @@ public:
|
|||||||
|
|
||||||
FastMutex::ScopedLock lock(_mutex);
|
FastMutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<AbstractFactory> ptr(pAbstractFactory);
|
std::auto_ptr<AbstractFactory> ptr(pAbstractFactory);
|
||||||
|
#else
|
||||||
|
std::unique_ptr<AbstractFactory> ptr(pAbstractFactory);
|
||||||
|
#endif
|
||||||
typename FactoryMap::iterator it = _map.find(className);
|
typename FactoryMap::iterator it = _map.find(className);
|
||||||
if (it == _map.end())
|
if (it == _map.end())
|
||||||
_map[className] = ptr.release();
|
_map[className] = ptr.release();
|
||||||
|
@ -254,6 +254,7 @@ POCO_DECLARE_EXCEPTION(Foundation_API, CreateFileException, FileException)
|
|||||||
POCO_DECLARE_EXCEPTION(Foundation_API, OpenFileException, FileException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, OpenFileException, FileException)
|
||||||
POCO_DECLARE_EXCEPTION(Foundation_API, WriteFileException, FileException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, WriteFileException, FileException)
|
||||||
POCO_DECLARE_EXCEPTION(Foundation_API, ReadFileException, FileException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, ReadFileException, FileException)
|
||||||
|
POCO_DECLARE_EXCEPTION(Foundation_API, DirectoryNotEmptyException, FileException)
|
||||||
POCO_DECLARE_EXCEPTION(Foundation_API, UnknownURISchemeException, RuntimeException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, UnknownURISchemeException, RuntimeException)
|
||||||
POCO_DECLARE_EXCEPTION(Foundation_API, TooManyURIRedirectsException, RuntimeException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, TooManyURIRedirectsException, RuntimeException)
|
||||||
POCO_DECLARE_EXCEPTION(Foundation_API, URISyntaxException, SyntaxException)
|
POCO_DECLARE_EXCEPTION(Foundation_API, URISyntaxException, SyntaxException)
|
||||||
|
@ -325,7 +325,7 @@ public:
|
|||||||
if (!isWritable())
|
if (!isWritable())
|
||||||
throw Poco::InvalidAccessException("Buffer not writable.");
|
throw Poco::InvalidAccessException("Buffer not writable.");
|
||||||
|
|
||||||
std::memcpy(&_buffer[_used], ptr, length * sizeof(T));
|
std::memcpy(begin() + _used, ptr, length * sizeof(T));
|
||||||
std::size_t usedBefore = _used;
|
std::size_t usedBefore = _used;
|
||||||
_used += length;
|
_used += length;
|
||||||
if (_notify) notify(usedBefore);
|
if (_notify) notify(usedBefore);
|
||||||
|
@ -143,7 +143,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Foundation_API InflatingOutputStream: public InflatingIOS, public std::ostream
|
class Foundation_API InflatingOutputStream: public std::ostream, public InflatingIOS
|
||||||
/// This stream decompresses all data passing through it
|
/// This stream decompresses all data passing through it
|
||||||
/// using zlib's inflate algorithm.
|
/// using zlib's inflate algorithm.
|
||||||
///
|
///
|
||||||
@ -173,7 +173,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Foundation_API InflatingInputStream: public InflatingIOS, public std::istream
|
class Foundation_API InflatingInputStream: public std::istream, public InflatingIOS
|
||||||
/// This stream decompresses all data passing through it
|
/// This stream decompresses all data passing through it
|
||||||
/// using zlib's inflate algorithm.
|
/// using zlib's inflate algorithm.
|
||||||
/// Example:
|
/// Example:
|
||||||
|
@ -259,19 +259,19 @@ public:
|
|||||||
_factory.deactivateObject(pObject);
|
_factory.deactivateObject(pObject);
|
||||||
if (_pool.size() < _capacity)
|
if (_pool.size() < _capacity)
|
||||||
{
|
{
|
||||||
_pool.push_back(pObject);
|
try
|
||||||
}
|
{
|
||||||
else
|
_pool.push_back(pObject);
|
||||||
{
|
return;
|
||||||
_factory.destroyObject(pObject);
|
}
|
||||||
_size--;
|
catch (...)
|
||||||
_availableCondition.signal();
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
_factory.destroyObject(pObject);
|
||||||
{
|
_size--;
|
||||||
_factory.destroyObject(pObject);
|
_availableCondition.signal();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t capacity() const
|
std::size_t capacity() const
|
||||||
|
@ -20,7 +20,48 @@
|
|||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
#if POCO_OS == POCO_OS_WINDOWS_NT
|
#if defined(POCO_HAVE_STD_ATOMICS)
|
||||||
|
//
|
||||||
|
// C++11 atomics
|
||||||
|
//
|
||||||
|
AtomicCounter::AtomicCounter():
|
||||||
|
_counter(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AtomicCounter::AtomicCounter(AtomicCounter::ValueType initialValue):
|
||||||
|
_counter(initialValue)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AtomicCounter::AtomicCounter(const AtomicCounter& counter):
|
||||||
|
_counter(counter.value())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AtomicCounter::~AtomicCounter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AtomicCounter& AtomicCounter::operator = (const AtomicCounter& counter)
|
||||||
|
{
|
||||||
|
_counter.store(counter._counter.load());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AtomicCounter& AtomicCounter::operator = (AtomicCounter::ValueType value)
|
||||||
|
{
|
||||||
|
_counter.store(value);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#elif POCO_OS == POCO_OS_WINDOWS_NT
|
||||||
//
|
//
|
||||||
// Windows
|
// Windows
|
||||||
//
|
//
|
||||||
|
@ -34,6 +34,15 @@
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#if (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
||||||
|
#ifndef __APPLE__ // See GitHub issue #1453 - not available before Mac OS 10.12/iOS 10
|
||||||
|
#define POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +129,7 @@ void Clock::update()
|
|||||||
#endif
|
#endif
|
||||||
_clock = ClockVal(ts.tv_sec)*resolution() + ts.tv_nsec/1000;
|
_clock = ClockVal(ts.tv_sec)*resolution() + ts.tv_nsec/1000;
|
||||||
|
|
||||||
#elif (defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK)) || defined(__QNX__)
|
#elif defined(POCO_HAVE_CLOCK_GETTIME)
|
||||||
|
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &ts))
|
if (clock_gettime(CLOCK_MONOTONIC, &ts))
|
||||||
|
@ -334,15 +334,15 @@ DeflatingStreamBuf* DeflatingIOS::rdbuf()
|
|||||||
|
|
||||||
|
|
||||||
DeflatingOutputStream::DeflatingOutputStream(std::ostream& ostr, DeflatingStreamBuf::StreamType type, int level):
|
DeflatingOutputStream::DeflatingOutputStream(std::ostream& ostr, DeflatingStreamBuf::StreamType type, int level):
|
||||||
DeflatingIOS(ostr, type, level),
|
std::ostream(&_buf),
|
||||||
std::ostream(&_buf)
|
DeflatingIOS(ostr, type, level)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DeflatingOutputStream::DeflatingOutputStream(std::ostream& ostr, int windowBits, int level):
|
DeflatingOutputStream::DeflatingOutputStream(std::ostream& ostr, int windowBits, int level):
|
||||||
DeflatingIOS(ostr, windowBits, level),
|
std::ostream(&_buf),
|
||||||
std::ostream(&_buf)
|
DeflatingIOS(ostr, windowBits, level)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,15 +365,15 @@ int DeflatingOutputStream::sync()
|
|||||||
|
|
||||||
|
|
||||||
DeflatingInputStream::DeflatingInputStream(std::istream& istr, DeflatingStreamBuf::StreamType type, int level):
|
DeflatingInputStream::DeflatingInputStream(std::istream& istr, DeflatingStreamBuf::StreamType type, int level):
|
||||||
DeflatingIOS(istr, type, level),
|
std::istream(&_buf),
|
||||||
std::istream(&_buf)
|
DeflatingIOS(istr, type, level)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DeflatingInputStream::DeflatingInputStream(std::istream& istr, int windowBits, int level):
|
DeflatingInputStream::DeflatingInputStream(std::istream& istr, int windowBits, int level):
|
||||||
DeflatingIOS(istr, windowBits, level),
|
std::istream(&_buf),
|
||||||
std::istream(&_buf)
|
DeflatingIOS(istr, windowBits, level)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,28 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Note: pthread_cond_timedwait() with CLOCK_MONOTONIC is supported
|
||||||
|
// on Linux and QNX, as well as on Android >= 5.0. On Android < 5.0,
|
||||||
|
// HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC is defined to indicate
|
||||||
|
// availability of non-standard pthread_cond_timedwait_monotonic().
|
||||||
|
//
|
||||||
|
#ifndef POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT
|
||||||
|
#if (defined(__linux__) || defined(__QNX__)) && !(defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
|
||||||
|
#define POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#if (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
||||||
|
#ifndef __APPLE__ // See GitHub issue #1453 - not available before Mac OS 10.12/iOS 10
|
||||||
|
#define POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
@ -40,7 +62,7 @@ EventImpl::EventImpl(EventTypeImpl type): _auto(type == EVENT_AUTORESET_IMPL), _
|
|||||||
if (pthread_mutex_init(&_mutex, NULL))
|
if (pthread_mutex_init(&_mutex, NULL))
|
||||||
throw SystemException("cannot create event (mutex)");
|
throw SystemException("cannot create event (mutex)");
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__QNX__)
|
#if defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
|
||||||
pthread_condattr_t attr;
|
pthread_condattr_t attr;
|
||||||
if (pthread_condattr_init(&attr))
|
if (pthread_condattr_init(&attr))
|
||||||
{
|
{
|
||||||
@ -105,7 +127,7 @@ bool EventImpl::waitImpl(long milliseconds)
|
|||||||
delta.tv_sec = milliseconds / 1000;
|
delta.tv_sec = milliseconds / 1000;
|
||||||
delta.tv_nsec = (milliseconds % 1000)*1000000;
|
delta.tv_nsec = (milliseconds % 1000)*1000000;
|
||||||
pthread_get_expiration_np(&delta, &abstime);
|
pthread_get_expiration_np(&delta, &abstime);
|
||||||
#elif defined(__linux__) || defined(__QNX__)
|
#elif defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
|
||||||
clock_gettime(CLOCK_MONOTONIC, &abstime);
|
clock_gettime(CLOCK_MONOTONIC, &abstime);
|
||||||
abstime.tv_sec += milliseconds / 1000;
|
abstime.tv_sec += milliseconds / 1000;
|
||||||
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
||||||
@ -114,7 +136,7 @@ bool EventImpl::waitImpl(long milliseconds)
|
|||||||
abstime.tv_nsec -= 1000000000;
|
abstime.tv_nsec -= 1000000000;
|
||||||
abstime.tv_sec++;
|
abstime.tv_sec++;
|
||||||
}
|
}
|
||||||
#elif (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS)
|
#elif defined(POCO_HAVE_CLOCK_GETTIME)
|
||||||
clock_gettime(CLOCK_REALTIME, &abstime);
|
clock_gettime(CLOCK_REALTIME, &abstime);
|
||||||
abstime.tv_sec += milliseconds / 1000;
|
abstime.tv_sec += milliseconds / 1000;
|
||||||
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
||||||
|
@ -178,6 +178,7 @@ POCO_IMPLEMENT_EXCEPTION(CreateFileException, FileException, "Cannot create file
|
|||||||
POCO_IMPLEMENT_EXCEPTION(OpenFileException, FileException, "Cannot open file")
|
POCO_IMPLEMENT_EXCEPTION(OpenFileException, FileException, "Cannot open file")
|
||||||
POCO_IMPLEMENT_EXCEPTION(WriteFileException, FileException, "Cannot write file")
|
POCO_IMPLEMENT_EXCEPTION(WriteFileException, FileException, "Cannot write file")
|
||||||
POCO_IMPLEMENT_EXCEPTION(ReadFileException, FileException, "Cannot read file")
|
POCO_IMPLEMENT_EXCEPTION(ReadFileException, FileException, "Cannot read file")
|
||||||
|
POCO_IMPLEMENT_EXCEPTION(DirectoryNotEmptyException, FileException, "Directory not empty")
|
||||||
POCO_IMPLEMENT_EXCEPTION(UnknownURISchemeException, RuntimeException, "Unknown URI scheme")
|
POCO_IMPLEMENT_EXCEPTION(UnknownURISchemeException, RuntimeException, "Unknown URI scheme")
|
||||||
POCO_IMPLEMENT_EXCEPTION(TooManyURIRedirectsException, RuntimeException, "Too many URI redirects")
|
POCO_IMPLEMENT_EXCEPTION(TooManyURIRedirectsException, RuntimeException, "Too many URI redirects")
|
||||||
POCO_IMPLEMENT_EXCEPTION(URISyntaxException, SyntaxException, "Bad URI syntax")
|
POCO_IMPLEMENT_EXCEPTION(URISyntaxException, SyntaxException, "Bad URI syntax")
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#else
|
#else
|
||||||
#include "File_VMS.cpp"
|
#include "File_VMS.cpp"
|
||||||
#endif
|
#endif
|
||||||
|
#include "Poco/Thread.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -269,8 +270,37 @@ void File::remove(bool recursive)
|
|||||||
{
|
{
|
||||||
it->remove(true);
|
it->remove(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: On Windows, removing a directory may not succeed at first
|
||||||
|
// try because deleting files is not a synchronous operation. Files
|
||||||
|
// are merely marked as deleted, and actually removed at a later time.
|
||||||
|
//
|
||||||
|
// An alternate strategy would be moving files to a different directory
|
||||||
|
// first (on the same drive, but outside the deleted tree), and marking
|
||||||
|
// them as hidden, before deleting them, but this could lead to other issues.
|
||||||
|
// So we simply retry after some time until we succeed, or give up.
|
||||||
|
|
||||||
|
int retry = 8;
|
||||||
|
long sleep = 10;
|
||||||
|
while (retry > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
removeImpl();
|
||||||
|
retry = 0;
|
||||||
|
}
|
||||||
|
catch (DirectoryNotEmptyException&)
|
||||||
|
{
|
||||||
|
if (--retry == 0) throw;
|
||||||
|
Poco::Thread::sleep(sleep);
|
||||||
|
sleep *= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removeImpl();
|
||||||
}
|
}
|
||||||
removeImpl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -507,7 +507,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
throw FileException("disk quota exceeded", path, errno);
|
throw FileException("disk quota exceeded", path, errno);
|
||||||
#if !defined(_AIX)
|
#if !defined(_AIX)
|
||||||
case ENOTEMPTY:
|
case ENOTEMPTY:
|
||||||
throw FileException("directory not empty", path, errno);
|
throw DirectoryNotEmptyException(path, errno);
|
||||||
#endif
|
#endif
|
||||||
case ENAMETOOLONG:
|
case ENAMETOOLONG:
|
||||||
throw PathSyntaxException(path, errno);
|
throw PathSyntaxException(path, errno);
|
||||||
|
@ -405,7 +405,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
case EDQUOT:
|
case EDQUOT:
|
||||||
throw FileException("disk quota exceeded", path);
|
throw FileException("disk quota exceeded", path);
|
||||||
case ENOTEMPTY:
|
case ENOTEMPTY:
|
||||||
throw FileException("directory not empty", path);
|
throw DirectoryNotEmptyException(path, err);
|
||||||
case ENAMETOOLONG:
|
case ENAMETOOLONG:
|
||||||
throw PathSyntaxException(path);
|
throw PathSyntaxException(path);
|
||||||
default:
|
default:
|
||||||
|
@ -389,7 +389,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
case ENOSPC:
|
case ENOSPC:
|
||||||
throw FileException("no space left on device", path);
|
throw FileException("no space left on device", path);
|
||||||
case ENOTEMPTY:
|
case ENOTEMPTY:
|
||||||
throw FileException("directory not empty", path);
|
throw DirectoryNotEmptyException(path);
|
||||||
case ENAMETOOLONG:
|
case ENAMETOOLONG:
|
||||||
throw PathSyntaxException(path);
|
throw PathSyntaxException(path);
|
||||||
case ENFILE:
|
case ENFILE:
|
||||||
|
@ -409,7 +409,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
case ERROR_CANNOT_MAKE:
|
case ERROR_CANNOT_MAKE:
|
||||||
throw CreateFileException(path, err);
|
throw CreateFileException(path, err);
|
||||||
case ERROR_DIR_NOT_EMPTY:
|
case ERROR_DIR_NOT_EMPTY:
|
||||||
throw FileException("directory not empty", path, err);
|
throw DirectoryNotEmptyException(path, err);
|
||||||
case ERROR_WRITE_FAULT:
|
case ERROR_WRITE_FAULT:
|
||||||
throw WriteFileException(path, err);
|
throw WriteFileException(path, err);
|
||||||
case ERROR_READ_FAULT:
|
case ERROR_READ_FAULT:
|
||||||
|
@ -417,7 +417,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
case ERROR_CANNOT_MAKE:
|
case ERROR_CANNOT_MAKE:
|
||||||
throw CreateFileException(path, err);
|
throw CreateFileException(path, err);
|
||||||
case ERROR_DIR_NOT_EMPTY:
|
case ERROR_DIR_NOT_EMPTY:
|
||||||
throw FileException("directory not empty", path, err);
|
throw DirectoryNotEmptyException(path, err);
|
||||||
case ERROR_WRITE_FAULT:
|
case ERROR_WRITE_FAULT:
|
||||||
throw WriteFileException(path, err);
|
throw WriteFileException(path, err);
|
||||||
case ERROR_READ_FAULT:
|
case ERROR_READ_FAULT:
|
||||||
|
@ -407,7 +407,7 @@ void FileImpl::handleLastErrorImpl(const std::string& path)
|
|||||||
case ERROR_CANNOT_MAKE:
|
case ERROR_CANNOT_MAKE:
|
||||||
throw CreateFileException(path);
|
throw CreateFileException(path);
|
||||||
case ERROR_DIR_NOT_EMPTY:
|
case ERROR_DIR_NOT_EMPTY:
|
||||||
throw FileException("directory not empty", path);
|
throw DirectoryNotEmptyException(path);
|
||||||
case ERROR_WRITE_FAULT:
|
case ERROR_WRITE_FAULT:
|
||||||
throw WriteFileException(path);
|
throw WriteFileException(path);
|
||||||
case ERROR_READ_FAULT:
|
case ERROR_READ_FAULT:
|
||||||
|
@ -309,15 +309,15 @@ InflatingStreamBuf* InflatingIOS::rdbuf()
|
|||||||
|
|
||||||
|
|
||||||
InflatingOutputStream::InflatingOutputStream(std::ostream& ostr, InflatingStreamBuf::StreamType type):
|
InflatingOutputStream::InflatingOutputStream(std::ostream& ostr, InflatingStreamBuf::StreamType type):
|
||||||
InflatingIOS(ostr, type),
|
std::ostream(&_buf),
|
||||||
std::ostream(&_buf)
|
InflatingIOS(ostr, type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
InflatingOutputStream::InflatingOutputStream(std::ostream& ostr, int windowBits):
|
InflatingOutputStream::InflatingOutputStream(std::ostream& ostr, int windowBits):
|
||||||
InflatingIOS(ostr, windowBits),
|
std::ostream(&_buf),
|
||||||
std::ostream(&_buf)
|
InflatingIOS(ostr, windowBits)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,15 +334,15 @@ int InflatingOutputStream::close()
|
|||||||
|
|
||||||
|
|
||||||
InflatingInputStream::InflatingInputStream(std::istream& istr, InflatingStreamBuf::StreamType type):
|
InflatingInputStream::InflatingInputStream(std::istream& istr, InflatingStreamBuf::StreamType type):
|
||||||
InflatingIOS(istr, type),
|
std::istream(&_buf),
|
||||||
std::istream(&_buf)
|
InflatingIOS(istr, type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
InflatingInputStream::InflatingInputStream(std::istream& istr, int windowBits):
|
InflatingInputStream::InflatingInputStream(std::istream& istr, int windowBits):
|
||||||
InflatingIOS(istr, windowBits),
|
std::istream(&_buf),
|
||||||
std::istream(&_buf)
|
InflatingIOS(istr, windowBits)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,9 +29,18 @@
|
|||||||
|
|
||||||
|
|
||||||
#if defined(_POSIX_TIMEOUTS) && (_POSIX_TIMEOUTS - 200112L) >= 0L
|
#if defined(_POSIX_TIMEOUTS) && (_POSIX_TIMEOUTS - 200112L) >= 0L
|
||||||
#if defined(_POSIX_THREADS) && (_POSIX_THREADS - 200112L) >= 0L
|
#if defined(_POSIX_THREADS) && (_POSIX_THREADS - 200112L) >= 0L
|
||||||
#define POCO_HAVE_MUTEX_TIMEOUT
|
#define POCO_HAVE_MUTEX_TIMEOUT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#if (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
||||||
|
#ifndef __APPLE__ // See GitHub issue #1453 - not available before Mac OS 10.12/iOS 10
|
||||||
|
#define POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -73,7 +82,7 @@ bool MutexImpl::tryLockImpl(long milliseconds)
|
|||||||
{
|
{
|
||||||
#if defined(POCO_HAVE_MUTEX_TIMEOUT)
|
#if defined(POCO_HAVE_MUTEX_TIMEOUT)
|
||||||
struct timespec abstime;
|
struct timespec abstime;
|
||||||
#if defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)
|
#if defined(POCO_HAVE_CLOCK_GETTIME)
|
||||||
clock_gettime(CLOCK_REALTIME, &abstime);
|
clock_gettime(CLOCK_REALTIME, &abstime);
|
||||||
abstime.tv_sec += milliseconds / 1000;
|
abstime.tv_sec += milliseconds / 1000;
|
||||||
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
||||||
|
@ -59,7 +59,11 @@ void pad(std::string& str, int precision, int width, char prefix = ' ', char dec
|
|||||||
std::string::size_type frac = str.length() - decSepPos - 1;
|
std::string::size_type frac = str.length() - decSepPos - 1;
|
||||||
|
|
||||||
std::string::size_type ePos = str.find_first_of("eE");
|
std::string::size_type ePos = str.find_first_of("eE");
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<std::string> eStr;
|
std::auto_ptr<std::string> eStr;
|
||||||
|
#else
|
||||||
|
std::unique_ptr<std::string> eStr;
|
||||||
|
#endif
|
||||||
if (ePos != std::string::npos)
|
if (ePos != std::string::npos)
|
||||||
{
|
{
|
||||||
eStr.reset(new std::string(str.substr(ePos, std::string::npos)));
|
eStr.reset(new std::string(str.substr(ePos, std::string::npos)));
|
||||||
|
@ -24,6 +24,28 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Note: pthread_cond_timedwait() with CLOCK_MONOTONIC is supported
|
||||||
|
// on Linux and QNX, as well as on Android >= 5.0. On Android < 5.0,
|
||||||
|
// HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC is defined to indicate
|
||||||
|
// availability of non-standard pthread_cond_timedwait_monotonic().
|
||||||
|
//
|
||||||
|
#ifndef POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT
|
||||||
|
#if (defined(__linux__) || defined(__QNX__)) && !(defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
|
||||||
|
#define POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#if (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
||||||
|
#ifndef __APPLE__ // See GitHub issue #1453 - not available before Mac OS 10.12/iOS 10
|
||||||
|
#define POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
|
|
||||||
|
|
||||||
@ -41,7 +63,7 @@ SemaphoreImpl::SemaphoreImpl(int n, int max): _n(n), _max(max)
|
|||||||
if (pthread_mutex_init(&_mutex, NULL))
|
if (pthread_mutex_init(&_mutex, NULL))
|
||||||
throw SystemException("cannot create semaphore (mutex)");
|
throw SystemException("cannot create semaphore (mutex)");
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__QNX__)
|
#if defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
|
||||||
pthread_condattr_t attr;
|
pthread_condattr_t attr;
|
||||||
if (pthread_condattr_init(&attr))
|
if (pthread_condattr_init(&attr))
|
||||||
{
|
{
|
||||||
@ -105,7 +127,7 @@ bool SemaphoreImpl::waitImpl(long milliseconds)
|
|||||||
delta.tv_sec = milliseconds / 1000;
|
delta.tv_sec = milliseconds / 1000;
|
||||||
delta.tv_nsec = (milliseconds % 1000)*1000000;
|
delta.tv_nsec = (milliseconds % 1000)*1000000;
|
||||||
pthread_get_expiration_np(&delta, &abstime);
|
pthread_get_expiration_np(&delta, &abstime);
|
||||||
#elif defined(__linux__) || defined(__QNX__)
|
#elif defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
|
||||||
clock_gettime(CLOCK_MONOTONIC, &abstime);
|
clock_gettime(CLOCK_MONOTONIC, &abstime);
|
||||||
abstime.tv_sec += milliseconds / 1000;
|
abstime.tv_sec += milliseconds / 1000;
|
||||||
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
||||||
@ -114,7 +136,7 @@ bool SemaphoreImpl::waitImpl(long milliseconds)
|
|||||||
abstime.tv_nsec -= 1000000000;
|
abstime.tv_nsec -= 1000000000;
|
||||||
abstime.tv_sec++;
|
abstime.tv_sec++;
|
||||||
}
|
}
|
||||||
#elif (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS)
|
#elif defined(POCO_HAVE_CLOCK_GETTIME)
|
||||||
clock_gettime(CLOCK_REALTIME, &abstime);
|
clock_gettime(CLOCK_REALTIME, &abstime);
|
||||||
abstime.tv_sec += milliseconds / 1000;
|
abstime.tv_sec += milliseconds / 1000;
|
||||||
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
abstime.tv_nsec += (milliseconds % 1000)*1000000;
|
||||||
|
@ -91,7 +91,7 @@ std::string SharedLibraryImpl::prefixImpl()
|
|||||||
|
|
||||||
std::string SharedLibraryImpl::suffixImpl()
|
std::string SharedLibraryImpl::suffixImpl()
|
||||||
{
|
{
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.sl";
|
return "d.sl";
|
||||||
#else
|
#else
|
||||||
return ".sl";
|
return ".sl";
|
||||||
|
@ -112,25 +112,25 @@ std::string SharedLibraryImpl::prefixImpl()
|
|||||||
std::string SharedLibraryImpl::suffixImpl()
|
std::string SharedLibraryImpl::suffixImpl()
|
||||||
{
|
{
|
||||||
#if POCO_OS == POCO_OS_MAC_OS_X
|
#if POCO_OS == POCO_OS_MAC_OS_X
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.dylib";
|
return "d.dylib";
|
||||||
#else
|
#else
|
||||||
return ".dylib";
|
return ".dylib";
|
||||||
#endif
|
#endif
|
||||||
#elif POCO_OS == POCO_OS_HPUX
|
#elif POCO_OS == POCO_OS_HPUX
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.sl";
|
return "d.sl";
|
||||||
#else
|
#else
|
||||||
return ".sl";
|
return ".sl";
|
||||||
#endif
|
#endif
|
||||||
#elif POCO_OS == POCO_OS_CYGWIN
|
#elif POCO_OS == POCO_OS_CYGWIN
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.dll";
|
return "d.dll";
|
||||||
#else
|
#else
|
||||||
return ".dll";
|
return ".dll";
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.so";
|
return "d.so";
|
||||||
#else
|
#else
|
||||||
return ".so";
|
return ".so";
|
||||||
|
@ -114,7 +114,7 @@ std::string SharedLibraryImpl::prefixImpl()
|
|||||||
|
|
||||||
std::string SharedLibraryImpl::suffixImpl()
|
std::string SharedLibraryImpl::suffixImpl()
|
||||||
{
|
{
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.exe";
|
return "d.exe";
|
||||||
#else
|
#else
|
||||||
return ".exe";
|
return ".exe";
|
||||||
|
@ -95,7 +95,7 @@ std::string SharedLibraryImpl::prefixImpl()
|
|||||||
|
|
||||||
std::string SharedLibraryImpl::suffixImpl()
|
std::string SharedLibraryImpl::suffixImpl()
|
||||||
{
|
{
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.dll";
|
return "d.dll";
|
||||||
#else
|
#else
|
||||||
return ".dll";
|
return ".dll";
|
||||||
|
@ -106,7 +106,7 @@ std::string SharedLibraryImpl::prefixImpl()
|
|||||||
|
|
||||||
std::string SharedLibraryImpl::suffixImpl()
|
std::string SharedLibraryImpl::suffixImpl()
|
||||||
{
|
{
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG) && !defined(POCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX)
|
||||||
return "d.dll";
|
return "d.dll";
|
||||||
#else
|
#else
|
||||||
return ".dll";
|
return ".dll";
|
||||||
|
@ -39,6 +39,15 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#if (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
||||||
|
#ifndef __APPLE__ // See GitHub issue #1453 - not available before Mac OS 10.12/iOS 10
|
||||||
|
#define POCO_HAVE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(_WIN32_WCE) && defined(POCO_WINCE_TIMESTAMP_HACK)
|
#if defined(_WIN32_WCE) && defined(POCO_WINCE_TIMESTAMP_HACK)
|
||||||
|
|
||||||
|
|
||||||
@ -227,7 +236,7 @@ void Timestamp::update()
|
|||||||
ts.QuadPart -= epoch.QuadPart;
|
ts.QuadPart -= epoch.QuadPart;
|
||||||
_ts = ts.QuadPart/10;
|
_ts = ts.QuadPart/10;
|
||||||
|
|
||||||
#elif (defined(_POSIX_TIMERS) && defined(CLOCK_REALTIME)) || defined(POCO_VXWORKS) || defined(__QNX__)
|
#elif defined(POCO_HAVE_CLOCK_GETTIME)
|
||||||
|
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
if (clock_gettime(CLOCK_REALTIME, &ts))
|
if (clock_gettime(CLOCK_REALTIME, &ts))
|
||||||
|
@ -224,23 +224,23 @@ bool UTF8Encoding::isLegal(const unsigned char *bytes, int length)
|
|||||||
case 3:
|
case 3:
|
||||||
if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
|
if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
|
||||||
case 2:
|
case 2:
|
||||||
if ((a = (*--srcptr)) > 0xBF) return false;
|
a = (*--srcptr);
|
||||||
switch (*bytes)
|
switch (*bytes)
|
||||||
{
|
{
|
||||||
case 0xE0:
|
case 0xE0:
|
||||||
if (a < 0xA0) return false;
|
if (a < 0xA0 || a > 0xBF) return false;
|
||||||
break;
|
break;
|
||||||
case 0xED:
|
case 0xED:
|
||||||
if (a > 0x9F) return false;
|
if (a < 0x80 || a > 0x9F) return false;
|
||||||
break;
|
break;
|
||||||
case 0xF0:
|
case 0xF0:
|
||||||
if (a < 0x90) return false;
|
if (a < 0x90 || a > 0xBF) return false;
|
||||||
break;
|
break;
|
||||||
case 0xF4:
|
case 0xF4:
|
||||||
if (a > 0x8F) return false;
|
if (a < 0x80 || a > 0x8F) return false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (a < 0x80) return false;
|
if (a < 0x80 || a > 0xBF) return false;
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
if (*bytes >= 0x80 && *bytes < 0xC2) return false;
|
if (*bytes >= 0x80 && *bytes < 0xC2) return false;
|
||||||
|
@ -287,7 +287,7 @@ void MongoDBTest::testBuildInfo()
|
|||||||
|
|
||||||
void MongoDBTest::testConnectionPool()
|
void MongoDBTest::testConnectionPool()
|
||||||
{
|
{
|
||||||
Poco::Net::SocketAddress sa("localhost", 27017);
|
Poco::Net::SocketAddress sa("127.0.0.1", 27017);
|
||||||
Poco::PoolableObjectFactory<Poco::MongoDB::Connection, Poco::MongoDB::Connection::Ptr> factory(sa);
|
Poco::PoolableObjectFactory<Poco::MongoDB::Connection, Poco::MongoDB::Connection::Ptr> factory(sa);
|
||||||
Poco::ObjectPool<Poco::MongoDB::Connection, Poco::MongoDB::Connection::Ptr> pool(factory, 10, 15);
|
Poco::ObjectPool<Poco::MongoDB::Connection, Poco::MongoDB::Connection::Ptr> pool(factory, 10, 15);
|
||||||
|
|
||||||
@ -394,8 +394,8 @@ CppUnit::Test* MongoDBTest::suite()
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_mongo = new Poco::MongoDB::Connection("localhost", 27017);
|
_mongo = new Poco::MongoDB::Connection("127.0.0.1", 27017);
|
||||||
std::cout << "Connected to [localhost:27017]" << std::endl;
|
std::cout << "Connected to [127.0.0.1:27017]" << std::endl;
|
||||||
}
|
}
|
||||||
catch (Poco::Net::ConnectionRefusedException& e)
|
catch (Poco::Net::ConnectionRefusedException& e)
|
||||||
{
|
{
|
||||||
|
@ -89,6 +89,20 @@ public:
|
|||||||
///
|
///
|
||||||
/// Calls to connect cannot() come before calls to bind().
|
/// Calls to connect cannot() come before calls to bind().
|
||||||
|
|
||||||
|
void bind(const SocketAddress& address, bool reuseAddress, bool reusePort);
|
||||||
|
/// Bind a local address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// Calls to connect cannot() come before calls to bind().
|
||||||
|
|
||||||
int sendBytes(const void* buffer, int length, int flags = 0);
|
int sendBytes(const void* buffer, int length, int flags = 0);
|
||||||
/// Sends the contents of the given buffer through
|
/// Sends the contents of the given buffer through
|
||||||
/// the socket.
|
/// the socket.
|
||||||
|
@ -53,6 +53,7 @@ POCO_DECLARE_EXCEPTION(Net_API, NTPException, NetException)
|
|||||||
POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException)
|
POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException)
|
||||||
POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException)
|
POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException)
|
||||||
POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException)
|
POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException)
|
||||||
|
POCO_DECLARE_EXCEPTION(Net_API, AddressFamilyMismatchException, NetException)
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Net
|
} } // namespace Poco::Net
|
||||||
|
@ -82,6 +82,20 @@ public:
|
|||||||
///
|
///
|
||||||
/// Calls to connect() cannot come before calls to bind().
|
/// Calls to connect() cannot come before calls to bind().
|
||||||
|
|
||||||
|
void bind(const SocketAddress& address, bool reuseAddress, bool reusePort);
|
||||||
|
/// Bind a local address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// Calls to connect() cannot come before calls to bind().
|
||||||
|
|
||||||
int sendBytes(const void* buffer, int length, int flags = 0);
|
int sendBytes(const void* buffer, int length, int flags = 0);
|
||||||
/// Sends the contents of the given buffer through
|
/// Sends the contents of the given buffer through
|
||||||
/// the socket.
|
/// the socket.
|
||||||
|
@ -82,6 +82,19 @@ public:
|
|||||||
/// If reuseAddress is true, sets the SO_REUSEADDR
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
/// socket option.
|
/// socket option.
|
||||||
|
|
||||||
|
virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort);
|
||||||
|
/// Binds a local address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket. TCP clients should not bind a socket to a
|
||||||
|
/// specific address.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
|
||||||
virtual void bind(Poco::UInt16 port, bool reuseAddress = false);
|
virtual void bind(Poco::UInt16 port, bool reuseAddress = false);
|
||||||
/// Binds a local port to the socket.
|
/// Binds a local port to the socket.
|
||||||
///
|
///
|
||||||
@ -91,6 +104,18 @@ public:
|
|||||||
/// If reuseAddress is true, sets the SO_REUSEADDR
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
/// socket option.
|
/// socket option.
|
||||||
|
|
||||||
|
virtual void bind(Poco::UInt16 port, bool reuseAddress, bool reusePort);
|
||||||
|
/// Binds a local port to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
|
||||||
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
||||||
/// Binds a local IPv6 address to the socket.
|
/// Binds a local IPv6 address to the socket.
|
||||||
///
|
///
|
||||||
@ -108,6 +133,26 @@ public:
|
|||||||
/// If the library has not been built with IPv6 support,
|
/// If the library has not been built with IPv6 support,
|
||||||
/// a Poco::NotImplementedException will be thrown.
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
|
virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only);
|
||||||
|
/// Binds a local IPv6 address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket. TCP clients should not bind a socket to a
|
||||||
|
/// specific address.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// The given address must be an IPv6 address. The
|
||||||
|
/// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket
|
||||||
|
/// according to the ipV6Only parameter.
|
||||||
|
///
|
||||||
|
/// If the library has not been built with IPv6 support,
|
||||||
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
virtual void bind6(Poco::UInt16 port, bool reuseAddress = false, bool ipV6Only = false);
|
virtual void bind6(Poco::UInt16 port, bool reuseAddress = false, bool ipV6Only = false);
|
||||||
/// Binds a local IPv6 port to the socket.
|
/// Binds a local IPv6 port to the socket.
|
||||||
///
|
///
|
||||||
@ -124,6 +169,24 @@ public:
|
|||||||
/// If the library has not been built with IPv6 support,
|
/// If the library has not been built with IPv6 support,
|
||||||
/// a Poco::NotImplementedException will be thrown.
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
|
virtual void bind6(Poco::UInt16 port, bool reuseAddress, bool reusePort, bool ipV6Only);
|
||||||
|
/// Binds a local IPv6 port to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
/// The given address must be an IPv6 address. The
|
||||||
|
/// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket
|
||||||
|
/// according to the ipV6Only parameter.
|
||||||
|
///
|
||||||
|
/// If the library has not been built with IPv6 support,
|
||||||
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
virtual void listen(int backlog = 64);
|
virtual void listen(int backlog = 64);
|
||||||
/// Puts the socket into listening state.
|
/// Puts the socket into listening state.
|
||||||
///
|
///
|
||||||
|
@ -58,19 +58,38 @@ public:
|
|||||||
SocketAddress();
|
SocketAddress();
|
||||||
/// Creates a wildcard (all zero) IPv4 SocketAddress.
|
/// Creates a wildcard (all zero) IPv4 SocketAddress.
|
||||||
|
|
||||||
|
explicit SocketAddress(Family family);
|
||||||
|
/// Creates a SocketAddress with unspecified (wildcard) IP address
|
||||||
|
/// of the given family.
|
||||||
|
|
||||||
SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber);
|
SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber);
|
||||||
/// Creates a SocketAddress from an IP address and given port number.
|
/// Creates a SocketAddress from an IP address and given port number.
|
||||||
|
|
||||||
SocketAddress(Poco::UInt16 port);
|
explicit SocketAddress(Poco::UInt16 port);
|
||||||
/// Creates a SocketAddress with unspecified (wildcard) IP address
|
/// Creates a SocketAddress with unspecified (wildcard) IP address
|
||||||
/// and given port number.
|
/// and given port number.
|
||||||
|
|
||||||
|
SocketAddress(Family family, Poco::UInt16 port);
|
||||||
|
/// Creates a SocketAddress with unspecified (wildcard) IP address
|
||||||
|
/// of the given family, and given port number.
|
||||||
|
|
||||||
SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber);
|
SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber);
|
||||||
/// Creates a SocketAddress from an IP address and given port number.
|
/// Creates a SocketAddress from an IP address and given port number.
|
||||||
///
|
///
|
||||||
/// The IP address must either be a domain name, or it must
|
/// The IP address must either be a domain name, or it must
|
||||||
/// be in dotted decimal (IPv4) or hex string (IPv6) format.
|
/// be in dotted decimal (IPv4) or hex string (IPv6) format.
|
||||||
|
|
||||||
|
SocketAddress(Family family, const std::string& hostAddress, Poco::UInt16 portNumber);
|
||||||
|
/// Creates a SocketAddress from an IP address and given port number.
|
||||||
|
///
|
||||||
|
/// The IP address must either be a domain name, or it must
|
||||||
|
/// be in dotted decimal (IPv4) or hex string (IPv6) format.
|
||||||
|
///
|
||||||
|
/// If a domain name is given in hostAddress, it is resolved and the address
|
||||||
|
/// matching the given family is used. If no address matching the given family
|
||||||
|
/// is found, or the IP address given in hostAddress does not match the given
|
||||||
|
/// family, an AddressFamilyMismatchException is thrown.
|
||||||
|
|
||||||
SocketAddress(const std::string& hostAddress, const std::string& portNumber);
|
SocketAddress(const std::string& hostAddress, const std::string& portNumber);
|
||||||
/// Creates a SocketAddress from an IP address and the
|
/// Creates a SocketAddress from an IP address and the
|
||||||
/// service name or port number.
|
/// service name or port number.
|
||||||
@ -81,6 +100,21 @@ public:
|
|||||||
/// The given port must either be a decimal port number, or
|
/// The given port must either be a decimal port number, or
|
||||||
/// a service name.
|
/// a service name.
|
||||||
|
|
||||||
|
SocketAddress(Family family, const std::string& hostAddress, const std::string& portNumber);
|
||||||
|
/// Creates a SocketAddress from an IP address and the
|
||||||
|
/// service name or port number.
|
||||||
|
///
|
||||||
|
/// The IP address must either be a domain name, or it must
|
||||||
|
/// be in dotted decimal (IPv4) or hex string (IPv6) format.
|
||||||
|
///
|
||||||
|
/// The given port must either be a decimal port number, or
|
||||||
|
/// a service name.
|
||||||
|
///
|
||||||
|
/// If a domain name is given in hostAddress, it is resolved and the address
|
||||||
|
/// matching the given family is used. If no address matching the given family
|
||||||
|
/// is found, or the IP address given in hostAddress does not match the given
|
||||||
|
/// family, an AddressFamilyMismatchException is thrown.
|
||||||
|
|
||||||
explicit SocketAddress(const std::string& hostAndPort);
|
explicit SocketAddress(const std::string& hostAndPort);
|
||||||
/// Creates a SocketAddress from an IP address or host name and the
|
/// Creates a SocketAddress from an IP address or host name and the
|
||||||
/// port number/service name. Host name/address and port number must
|
/// port number/service name. Host name/address and port number must
|
||||||
@ -156,6 +190,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void init(const IPAddress& hostAddress, Poco::UInt16 portNumber);
|
void init(const IPAddress& hostAddress, Poco::UInt16 portNumber);
|
||||||
void init(const std::string& hostAddress, Poco::UInt16 portNumber);
|
void init(const std::string& hostAddress, Poco::UInt16 portNumber);
|
||||||
|
void init(Family family, const std::string& hostAddress, Poco::UInt16 portNumber);
|
||||||
void init(Family family, const std::string& address);
|
void init(Family family, const std::string& address);
|
||||||
void init(const std::string& hostAndPort);
|
void init(const std::string& hostAndPort);
|
||||||
Poco::UInt16 resolveService(const std::string& service);
|
Poco::UInt16 resolveService(const std::string& service);
|
||||||
|
@ -86,6 +86,19 @@ public:
|
|||||||
/// If reuseAddress is true, sets the SO_REUSEADDR
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
/// socket option.
|
/// socket option.
|
||||||
|
|
||||||
|
virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort );
|
||||||
|
/// Bind a local address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket. TCP clients should not bind a socket to a
|
||||||
|
/// specific address.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
|
||||||
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
||||||
/// Bind a local IPv6 address to the socket.
|
/// Bind a local IPv6 address to the socket.
|
||||||
///
|
///
|
||||||
@ -103,6 +116,26 @@ public:
|
|||||||
/// If the library has not been built with IPv6 support,
|
/// If the library has not been built with IPv6 support,
|
||||||
/// a Poco::NotImplementedException will be thrown.
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
|
virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only);
|
||||||
|
/// Bind a local IPv6 address to the socket.
|
||||||
|
///
|
||||||
|
/// This is usually only done when establishing a server
|
||||||
|
/// socket. TCP clients should not bind a socket to a
|
||||||
|
/// specific address.
|
||||||
|
///
|
||||||
|
/// If reuseAddress is true, sets the SO_REUSEADDR
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// If reusePort is true, sets the SO_REUSEPORT
|
||||||
|
/// socket option.
|
||||||
|
///
|
||||||
|
/// The given address must be an IPv6 address. The
|
||||||
|
/// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket
|
||||||
|
/// according to the ipV6Only parameter.
|
||||||
|
///
|
||||||
|
/// If the library has not been built with IPv6 support,
|
||||||
|
/// a Poco::NotImplementedException will be thrown.
|
||||||
|
|
||||||
virtual void listen(int backlog = 64);
|
virtual void listen(int backlog = 64);
|
||||||
/// Puts the socket into listening state.
|
/// Puts the socket into listening state.
|
||||||
///
|
///
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#include "Poco/Net/ServerSocket.h"
|
#include "Poco/Net/ServerSocket.h"
|
||||||
#include "Poco/Net/TCPServerConnectionFactory.h"
|
#include "Poco/Net/TCPServerConnectionFactory.h"
|
||||||
#include "Poco/Net/TCPServerParams.h"
|
#include "Poco/Net/TCPServerParams.h"
|
||||||
|
#include "Poco/RefCountedObject.h"
|
||||||
|
#include "Poco/AutoPtr.h"
|
||||||
#include "Poco/Runnable.h"
|
#include "Poco/Runnable.h"
|
||||||
#include "Poco/Thread.h"
|
#include "Poco/Thread.h"
|
||||||
#include "Poco/ThreadPool.h"
|
#include "Poco/ThreadPool.h"
|
||||||
@ -34,6 +36,35 @@ namespace Net {
|
|||||||
|
|
||||||
|
|
||||||
class TCPServerDispatcher;
|
class TCPServerDispatcher;
|
||||||
|
class StreamSocket;
|
||||||
|
|
||||||
|
|
||||||
|
class Net_API TCPServerConnectionFilter: public Poco::RefCountedObject
|
||||||
|
/// A TCPServerConnectionFilter can be used to reject incoming connections
|
||||||
|
/// before passing them on to the TCPServerDispatcher and
|
||||||
|
/// starting a thread to handle them.
|
||||||
|
///
|
||||||
|
/// An example use case is white-list or black-list IP address filtering.
|
||||||
|
///
|
||||||
|
/// Subclasses must override the accept() method.
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef Poco::AutoPtr<TCPServerConnectionFilter> Ptr;
|
||||||
|
|
||||||
|
virtual bool accept(const StreamSocket& socket) = 0;
|
||||||
|
/// Returns true if the given StreamSocket connection should
|
||||||
|
/// be handled, and passed on to the TCPServerDispatcher.
|
||||||
|
///
|
||||||
|
/// Returns false if the socket should be closed immediately.
|
||||||
|
///
|
||||||
|
/// The socket can be prevented from being closed immediately
|
||||||
|
/// if false is returned by creating a copy of the socket.
|
||||||
|
/// This can be used to handle certain socket connections in
|
||||||
|
/// a special way, outside the TCPServer framework.
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual ~TCPServerConnectionFilter();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class Net_API TCPServer: public Poco::Runnable
|
class Net_API TCPServer: public Poco::Runnable
|
||||||
@ -165,6 +196,19 @@ public:
|
|||||||
|
|
||||||
Poco::UInt16 port() const;
|
Poco::UInt16 port() const;
|
||||||
/// Returns the port the server socket listens on.
|
/// Returns the port the server socket listens on.
|
||||||
|
|
||||||
|
void setConnectionFilter(const TCPServerConnectionFilter::Ptr& pFilter);
|
||||||
|
/// Sets a TCPServerConnectionFilter. Can also be used to remove
|
||||||
|
/// a filter by passing a null pointer.
|
||||||
|
///
|
||||||
|
/// To avoid a potential race condition, the filter must
|
||||||
|
/// be set before the TCPServer is started. Trying to set
|
||||||
|
/// the filter after start() has been called will trigger
|
||||||
|
/// an assertion.
|
||||||
|
|
||||||
|
TCPServerConnectionFilter::Ptr getConnectionFilter() const;
|
||||||
|
/// Returns the TCPServerConnectionFilter set with setConnectionFilter(),
|
||||||
|
/// or null pointer if no filter has been set.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run();
|
void run();
|
||||||
@ -181,13 +225,17 @@ private:
|
|||||||
TCPServer(const TCPServer&);
|
TCPServer(const TCPServer&);
|
||||||
TCPServer& operator = (const TCPServer&);
|
TCPServer& operator = (const TCPServer&);
|
||||||
|
|
||||||
ServerSocket _socket;
|
ServerSocket _socket;
|
||||||
TCPServerDispatcher* _pDispatcher;
|
TCPServerDispatcher* _pDispatcher;
|
||||||
Poco::Thread _thread;
|
TCPServerConnectionFilter::Ptr _pConnectionFilter;
|
||||||
bool _stopped;
|
Poco::Thread _thread;
|
||||||
|
bool _stopped;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// inlines
|
||||||
|
//
|
||||||
inline const ServerSocket& TCPServer::socket() const
|
inline const ServerSocket& TCPServer::socket() const
|
||||||
{
|
{
|
||||||
return _socket;
|
return _socket;
|
||||||
@ -200,6 +248,12 @@ inline Poco::UInt16 TCPServer::port() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline TCPServerConnectionFilter::Ptr TCPServer::getConnectionFilter() const
|
||||||
|
{
|
||||||
|
return _pConnectionFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Net
|
} } // namespace Poco::Net
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +52,9 @@ public:
|
|||||||
virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout);
|
virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout);
|
||||||
virtual void connectNB(const SocketAddress& address);
|
virtual void connectNB(const SocketAddress& address);
|
||||||
virtual void bind(const SocketAddress& address, bool reuseAddress = false);
|
virtual void bind(const SocketAddress& address, bool reuseAddress = false);
|
||||||
|
virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort);
|
||||||
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false);
|
||||||
|
virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only);
|
||||||
virtual void listen(int backlog = 64);
|
virtual void listen(int backlog = 64);
|
||||||
virtual void close();
|
virtual void close();
|
||||||
virtual void shutdownReceive();
|
virtual void shutdownReceive();
|
||||||
|
@ -111,18 +111,38 @@ public:
|
|||||||
|
|
||||||
void onSocketReadable(const AutoPtr<ReadableNotification>& pNf)
|
void onSocketReadable(const AutoPtr<ReadableNotification>& pNf)
|
||||||
{
|
{
|
||||||
// some socket implementations (windows) report available
|
try
|
||||||
// bytes on client disconnect, so we double-check here
|
|
||||||
if (_socket.available())
|
|
||||||
{
|
{
|
||||||
int len = _socket.receiveBytes(_fifoIn);
|
int len = _socket.receiveBytes(_fifoIn);
|
||||||
_fifoIn.drain(_fifoOut.write(_fifoIn.buffer(), _fifoIn.used()));
|
if (len > 0)
|
||||||
|
{
|
||||||
|
_fifoIn.drain(_fifoOut.write(_fifoIn.buffer(), _fifoIn.used()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Poco::Exception& exc)
|
||||||
|
{
|
||||||
|
Application& app = Application::instance();
|
||||||
|
app.logger().log(exc);
|
||||||
|
delete this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSocketWritable(const AutoPtr<WritableNotification>& pNf)
|
void onSocketWritable(const AutoPtr<WritableNotification>& pNf)
|
||||||
{
|
{
|
||||||
_socket.sendBytes(_fifoOut);
|
try
|
||||||
|
{
|
||||||
|
_socket.sendBytes(_fifoOut);
|
||||||
|
}
|
||||||
|
catch (Poco::Exception& exc)
|
||||||
|
{
|
||||||
|
Application& app = Application::instance();
|
||||||
|
app.logger().log(exc);
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSocketShutdown(const AutoPtr<ShutdownNotification>& pNf)
|
void onSocketShutdown(const AutoPtr<ShutdownNotification>& pNf)
|
||||||
|
@ -119,7 +119,7 @@ public:
|
|||||||
app.logger().information(Poco::format("Frame received (length=%d, flags=0x%x).", n, unsigned(flags)));
|
app.logger().information(Poco::format("Frame received (length=%d, flags=0x%x).", n, unsigned(flags)));
|
||||||
ws.sendFrame(buffer, n, flags);
|
ws.sendFrame(buffer, n, flags);
|
||||||
}
|
}
|
||||||
while (n > 0 || (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
|
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
|
||||||
app.logger().information("WebSocket connection closed.");
|
app.logger().information("WebSocket connection closed.");
|
||||||
}
|
}
|
||||||
catch (WebSocketException& exc)
|
catch (WebSocketException& exc)
|
||||||
|
@ -83,6 +83,12 @@ void DatagramSocket::bind(const SocketAddress& address, bool reuseAddress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DatagramSocket::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
|
||||||
|
{
|
||||||
|
impl()->bind(address, reuseAddress, reusePort);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int DatagramSocket::sendBytes(const void* buffer, int length, int flags)
|
int DatagramSocket::sendBytes(const void* buffer, int length, int flags)
|
||||||
{
|
{
|
||||||
return impl()->sendBytes(buffer, length, flags);
|
return impl()->sendBytes(buffer, length, flags);
|
||||||
|
@ -78,7 +78,11 @@ void HTTPServerConnection::run()
|
|||||||
response.set("Server", server);
|
response.set("Server", server);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request));
|
std::auto_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request));
|
||||||
|
#else
|
||||||
|
std::unique_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request));
|
||||||
|
#endif
|
||||||
if (pHandler.get())
|
if (pHandler.get())
|
||||||
{
|
{
|
||||||
if (request.getExpectContinue() && response.getStatus() == HTTPResponse::HTTP_OK)
|
if (request.getExpectContinue() && response.getStatus() == HTTPResponse::HTTP_OK)
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include "Poco/UnbufferedStreamBuf.h"
|
#include "Poco/UnbufferedStreamBuf.h"
|
||||||
#include "Poco/NullStream.h"
|
#include "Poco/NullStream.h"
|
||||||
#include "Poco/StreamCopier.h"
|
#include "Poco/StreamCopier.h"
|
||||||
|
#include "Poco/Format.h"
|
||||||
|
#include "Poco/Version.h"
|
||||||
|
|
||||||
|
|
||||||
using Poco::URIStreamFactory;
|
using Poco::URIStreamFactory;
|
||||||
@ -115,6 +117,12 @@ std::istream* HTTPStreamFactory::open(const URI& uri)
|
|||||||
cred.authenticate(req, res);
|
cred.authenticate(req, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.set("User-Agent", Poco::format("poco/%d.%d.%d",
|
||||||
|
(POCO_VERSION >> 24) & 0xFF,
|
||||||
|
(POCO_VERSION >> 16) & 0xFF,
|
||||||
|
(POCO_VERSION >> 8) & 0xFF));
|
||||||
|
req.set("Accept", "*/*");
|
||||||
|
|
||||||
pSession->sendRequest(req);
|
pSession->sendRequest(req);
|
||||||
std::istream& rs = pSession->receiveResponse(res);
|
std::istream& rs = pSession->receiveResponse(res);
|
||||||
bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
|
bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
|
||||||
|
@ -119,6 +119,10 @@ namespace
|
|||||||
|
|
||||||
pPS->headers().set(it->first, it->second);
|
pPS->headers().set(it->first, it->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (contentDisp.empty())
|
||||||
|
_pMsg->addContent(pPS, cte);
|
||||||
|
|
||||||
if (!added) delete pPS;
|
if (!added) delete pPS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,8 @@ POCO_IMPLEMENT_EXCEPTION(ICMPException, NetException, "ICMP Exception")
|
|||||||
POCO_IMPLEMENT_EXCEPTION(NTPException, NetException, "NTP Exception")
|
POCO_IMPLEMENT_EXCEPTION(NTPException, NetException, "NTP Exception")
|
||||||
POCO_IMPLEMENT_EXCEPTION(HTMLFormException, NetException, "HTML Form Exception")
|
POCO_IMPLEMENT_EXCEPTION(HTMLFormException, NetException, "HTML Form Exception")
|
||||||
POCO_IMPLEMENT_EXCEPTION(WebSocketException, NetException, "WebSocket Exception")
|
POCO_IMPLEMENT_EXCEPTION(WebSocketException, NetException, "WebSocket Exception")
|
||||||
POCO_IMPLEMENT_EXCEPTION(UnsupportedFamilyException, NetException, "Unknown or unsupported socket family.")
|
POCO_IMPLEMENT_EXCEPTION(UnsupportedFamilyException, NetException, "Unknown or unsupported socket family")
|
||||||
|
POCO_IMPLEMENT_EXCEPTION(AddressFamilyMismatchException, NetException, "Address family mismatch")
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::Net
|
} } // namespace Poco::Net
|
||||||
|
@ -86,6 +86,12 @@ void RawSocket::bind(const SocketAddress& address, bool reuseAddress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RawSocket::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
|
||||||
|
{
|
||||||
|
impl()->bind(address, reuseAddress, reusePort);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int RawSocket::sendBytes(const void* buffer, int length, int flags)
|
int RawSocket::sendBytes(const void* buffer, int length, int flags)
|
||||||
{
|
{
|
||||||
return impl()->sendBytes(buffer, length, flags);
|
return impl()->sendBytes(buffer, length, flags);
|
||||||
|
@ -80,6 +80,12 @@ void ServerSocket::bind(const SocketAddress& address, bool reuseAddress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ServerSocket::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
|
||||||
|
{
|
||||||
|
impl()->bind(address, reuseAddress, reusePort);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress)
|
void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress)
|
||||||
{
|
{
|
||||||
IPAddress wildcardAddr;
|
IPAddress wildcardAddr;
|
||||||
@ -88,12 +94,26 @@ void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress, bool reusePort)
|
||||||
|
{
|
||||||
|
IPAddress wildcardAddr;
|
||||||
|
SocketAddress address(wildcardAddr, port);
|
||||||
|
impl()->bind(address, reuseAddress, reusePort);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
||||||
{
|
{
|
||||||
impl()->bind6(address, reuseAddress, ipV6Only);
|
impl()->bind6(address, reuseAddress, ipV6Only);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only)
|
||||||
|
{
|
||||||
|
impl()->bind6(address, reuseAddress, reusePort, ipV6Only);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only)
|
void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only)
|
||||||
{
|
{
|
||||||
#if defined(POCO_HAVE_IPv6)
|
#if defined(POCO_HAVE_IPv6)
|
||||||
@ -106,6 +126,18 @@ void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool reusePort, bool ipV6Only)
|
||||||
|
{
|
||||||
|
#if defined(POCO_HAVE_IPv6)
|
||||||
|
IPAddress wildcardAddr(IPAddress::IPv6);
|
||||||
|
SocketAddress address(wildcardAddr, port);
|
||||||
|
impl()->bind6(address, reuseAddress, reusePort, ipV6Only);
|
||||||
|
#else
|
||||||
|
throw Poco::NotImplementedException("No IPv6 support available");
|
||||||
|
#endif // POCO_HAVE_IPv6
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ServerSocket::listen(int backlog)
|
void ServerSocket::listen(int backlog)
|
||||||
{
|
{
|
||||||
impl()->listen(backlog);
|
impl()->listen(backlog);
|
||||||
|
@ -144,7 +144,9 @@ int Socket::select(SocketList& readList, SocketList& writeList, SocketList& exce
|
|||||||
}
|
}
|
||||||
|
|
||||||
epollSize = eventLast - eventsIn;
|
epollSize = eventLast - eventsIn;
|
||||||
epollfd = epoll_create(epollSize);
|
if (epollSize == 0) return 0;
|
||||||
|
|
||||||
|
epollfd = epoll_create(1);
|
||||||
if (epollfd < 0)
|
if (epollfd < 0)
|
||||||
{
|
{
|
||||||
SocketImpl::error("Can't create epoll queue");
|
SocketImpl::error("Can't create epoll queue");
|
||||||
|
@ -77,6 +77,12 @@ SocketAddress::SocketAddress()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SocketAddress::SocketAddress(Family fam)
|
||||||
|
{
|
||||||
|
init(IPAddress(fam), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber)
|
SocketAddress::SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber)
|
||||||
{
|
{
|
||||||
init(hostAddress, portNumber);
|
init(hostAddress, portNumber);
|
||||||
@ -89,21 +95,39 @@ SocketAddress::SocketAddress(Poco::UInt16 portNumber)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SocketAddress::SocketAddress(Family fam, Poco::UInt16 portNumber)
|
||||||
|
{
|
||||||
|
init(IPAddress(fam), portNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber)
|
SocketAddress::SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber)
|
||||||
{
|
{
|
||||||
init(hostAddress, portNumber);
|
init(hostAddress, portNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SocketAddress::SocketAddress(Family fam, const std::string& hostAddress, Poco::UInt16 portNumber)
|
||||||
|
{
|
||||||
|
init(fam, hostAddress, portNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const std::string& hostAddress, const std::string& portNumber)
|
SocketAddress::SocketAddress(const std::string& hostAddress, const std::string& portNumber)
|
||||||
{
|
{
|
||||||
init(hostAddress, resolveService(portNumber));
|
init(hostAddress, resolveService(portNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SocketAddress::SocketAddress(Family family, const std::string& addr)
|
SocketAddress::SocketAddress(Family fam, const std::string& hostAddress, const std::string& portNumber)
|
||||||
{
|
{
|
||||||
init(family, addr);
|
init(fam, hostAddress, resolveService(portNumber));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SocketAddress::SocketAddress(Family fam, const std::string& addr)
|
||||||
|
{
|
||||||
|
init(fam, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -250,7 +274,7 @@ void SocketAddress::init(const std::string& hostAddress, Poco::UInt16 portNumber
|
|||||||
HostEntry::AddressList addresses = he.addresses();
|
HostEntry::AddressList addresses = he.addresses();
|
||||||
if (addresses.size() > 0)
|
if (addresses.size() > 0)
|
||||||
{
|
{
|
||||||
#if defined(POCO_HAVE_IPv6)
|
#if defined(POCO_HAVE_IPv6) && defined(POCO_SOCKETADDRESS_PREFER_IPv4)
|
||||||
// if we get both IPv4 and IPv6 addresses, prefer IPv4
|
// if we get both IPv4 and IPv6 addresses, prefer IPv4
|
||||||
std::stable_sort(addresses.begin(), addresses.end(), AFLT());
|
std::stable_sort(addresses.begin(), addresses.end(), AFLT());
|
||||||
#endif
|
#endif
|
||||||
@ -261,6 +285,35 @@ void SocketAddress::init(const std::string& hostAddress, Poco::UInt16 portNumber
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SocketAddress::init(Family fam, const std::string& hostAddress, Poco::UInt16 portNumber)
|
||||||
|
{
|
||||||
|
IPAddress ip;
|
||||||
|
if (IPAddress::tryParse(hostAddress, ip))
|
||||||
|
{
|
||||||
|
if (ip.family() != fam) throw AddressFamilyMismatchException(hostAddress);
|
||||||
|
init(ip, portNumber);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HostEntry he = DNS::hostByName(hostAddress);
|
||||||
|
HostEntry::AddressList addresses = he.addresses();
|
||||||
|
if (addresses.size() > 0)
|
||||||
|
{
|
||||||
|
for (HostEntry::AddressList::const_iterator it = addresses.begin(); it != addresses.end(); ++it)
|
||||||
|
{
|
||||||
|
if (it->family() == fam)
|
||||||
|
{
|
||||||
|
init(*it, portNumber);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw AddressFamilyMismatchException(hostAddress);
|
||||||
|
}
|
||||||
|
else throw HostNotFoundException("No address found for host", hostAddress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SocketAddress::init(Family fam, const std::string& address)
|
void SocketAddress::init(Family fam, const std::string& address)
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX)
|
||||||
@ -271,8 +324,29 @@ void SocketAddress::init(Family fam, const std::string& address)
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
init(address);
|
std::string host;
|
||||||
if (fam != family()) throw Poco::InvalidArgumentException("address does not fit family");
|
std::string port;
|
||||||
|
std::string::const_iterator it = address.begin();
|
||||||
|
std::string::const_iterator end = address.end();
|
||||||
|
|
||||||
|
if (*it == '[')
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
while (it != end && *it != ']') host += *it++;
|
||||||
|
if (it == end) throw InvalidArgumentException("Malformed IPv6 address");
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (it != end && *it != ':') host += *it++;
|
||||||
|
}
|
||||||
|
if (it != end && *it == ':')
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
while (it != end) port += *it++;
|
||||||
|
}
|
||||||
|
else throw InvalidArgumentException("Missing port number");
|
||||||
|
init(fam, host, resolveService(port));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,16 +190,21 @@ void SocketImpl::connectNB(const SocketAddress& address)
|
|||||||
|
|
||||||
|
|
||||||
void SocketImpl::bind(const SocketAddress& address, bool reuseAddress)
|
void SocketImpl::bind(const SocketAddress& address, bool reuseAddress)
|
||||||
|
{
|
||||||
|
bind(address, reuseAddress, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
|
||||||
{
|
{
|
||||||
if (_sockfd == POCO_INVALID_SOCKET)
|
if (_sockfd == POCO_INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
init(address.af());
|
init(address.af());
|
||||||
}
|
}
|
||||||
if (reuseAddress)
|
if (reuseAddress)
|
||||||
{
|
|
||||||
setReuseAddress(true);
|
setReuseAddress(true);
|
||||||
|
if (reusePort)
|
||||||
setReusePort(true);
|
setReusePort(true);
|
||||||
}
|
|
||||||
#if defined(POCO_VXWORKS)
|
#if defined(POCO_VXWORKS)
|
||||||
int rc = ::bind(_sockfd, (sockaddr*) address.addr(), address.length());
|
int rc = ::bind(_sockfd, (sockaddr*) address.addr(), address.length());
|
||||||
#else
|
#else
|
||||||
@ -210,6 +215,12 @@ void SocketImpl::bind(const SocketAddress& address, bool reuseAddress)
|
|||||||
|
|
||||||
|
|
||||||
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
||||||
|
{
|
||||||
|
bind6(address, reuseAddress, true, ipV6Only);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only)
|
||||||
{
|
{
|
||||||
#if defined(POCO_HAVE_IPv6)
|
#if defined(POCO_HAVE_IPv6)
|
||||||
if (address.family() != SocketAddress::IPv6)
|
if (address.family() != SocketAddress::IPv6)
|
||||||
@ -225,10 +236,9 @@ void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV
|
|||||||
if (ipV6Only) throw Poco::NotImplementedException("IPV6_V6ONLY not defined.");
|
if (ipV6Only) throw Poco::NotImplementedException("IPV6_V6ONLY not defined.");
|
||||||
#endif
|
#endif
|
||||||
if (reuseAddress)
|
if (reuseAddress)
|
||||||
{
|
|
||||||
setReuseAddress(true);
|
setReuseAddress(true);
|
||||||
|
if (reusePort)
|
||||||
setReusePort(true);
|
setReusePort(true);
|
||||||
}
|
|
||||||
int rc = ::bind(_sockfd, address.addr(), address.length());
|
int rc = ::bind(_sockfd, address.addr(), address.length());
|
||||||
if (rc != 0) error(address.toString());
|
if (rc != 0) error(address.toString());
|
||||||
#else
|
#else
|
||||||
|
@ -30,6 +30,21 @@ namespace Poco {
|
|||||||
namespace Net {
|
namespace Net {
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// TCPServerConnectionFilter
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
TCPServerConnectionFilter::~TCPServerConnectionFilter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// TCPServer
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
TCPServer::TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber, TCPServerParams::Ptr pParams):
|
TCPServer::TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber, TCPServerParams::Ptr pParams):
|
||||||
_socket(ServerSocket(portNumber)),
|
_socket(ServerSocket(portNumber)),
|
||||||
_thread(threadName(_socket)),
|
_thread(threadName(_socket)),
|
||||||
@ -122,14 +137,18 @@ void TCPServer::run()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
StreamSocket ss = _socket.acceptConnection();
|
StreamSocket ss = _socket.acceptConnection();
|
||||||
// enable nodelay per default: OSX really needs that
|
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
if (!_pConnectionFilter || _pConnectionFilter->accept(ss))
|
||||||
if (ss.address().family() != AddressFamily::UNIX_LOCAL)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
ss.setNoDelay(true);
|
// enable nodelay per default: OSX really needs that
|
||||||
|
#if defined(POCO_OS_FAMILY_UNIX)
|
||||||
|
if (ss.address().family() != AddressFamily::UNIX_LOCAL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
ss.setNoDelay(true);
|
||||||
|
}
|
||||||
|
_pDispatcher->enqueue(ss);
|
||||||
}
|
}
|
||||||
_pDispatcher->enqueue(ss);
|
|
||||||
}
|
}
|
||||||
catch (Poco::Exception& exc)
|
catch (Poco::Exception& exc)
|
||||||
{
|
{
|
||||||
@ -161,6 +180,7 @@ int TCPServer::currentThreads() const
|
|||||||
return _pDispatcher->currentThreads();
|
return _pDispatcher->currentThreads();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int TCPServer::maxThreads() const
|
int TCPServer::maxThreads() const
|
||||||
{
|
{
|
||||||
return _pDispatcher->maxThreads();
|
return _pDispatcher->maxThreads();
|
||||||
@ -197,6 +217,14 @@ int TCPServer::refusedConnections() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TCPServer::setConnectionFilter(const TCPServerConnectionFilter::Ptr& pConnectionFilter)
|
||||||
|
{
|
||||||
|
poco_assert (_stopped);
|
||||||
|
|
||||||
|
_pConnectionFilter = pConnectionFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string TCPServer::threadName(const ServerSocket& socket)
|
std::string TCPServer::threadName(const ServerSocket& socket)
|
||||||
{
|
{
|
||||||
#if _WIN32_WCE == 0x0800
|
#if _WIN32_WCE == 0x0800
|
||||||
|
@ -110,7 +110,11 @@ void TCPServerDispatcher::run()
|
|||||||
TCPConnectionNotification* pCNf = dynamic_cast<TCPConnectionNotification*>(pNf.get());
|
TCPConnectionNotification* pCNf = dynamic_cast<TCPConnectionNotification*>(pNf.get());
|
||||||
if (pCNf)
|
if (pCNf)
|
||||||
{
|
{
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<TCPServerConnection> pConnection(_pConnectionFactory->createConnection(pCNf->socket()));
|
std::auto_ptr<TCPServerConnection> pConnection(_pConnectionFactory->createConnection(pCNf->socket()));
|
||||||
|
#else
|
||||||
|
std::unique_ptr<TCPServerConnection> pConnection(_pConnectionFactory->createConnection(pCNf->socket()));
|
||||||
|
#endif
|
||||||
poco_check_ptr(pConnection.get());
|
poco_check_ptr(pConnection.get());
|
||||||
beginConnection();
|
beginConnection();
|
||||||
pConnection->start();
|
pConnection->start();
|
||||||
|
@ -257,12 +257,24 @@ void WebSocketImpl::bind(const SocketAddress& address, bool reuseAddress)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WebSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
|
||||||
|
{
|
||||||
|
throw Poco::InvalidAccessException("Cannot bind() a WebSocketImpl");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void WebSocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
void WebSocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
|
||||||
{
|
{
|
||||||
throw Poco::InvalidAccessException("Cannot bind6() a WebSocketImpl");
|
throw Poco::InvalidAccessException("Cannot bind6() a WebSocketImpl");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WebSocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only)
|
||||||
|
{
|
||||||
|
throw Poco::InvalidAccessException("Cannot bind6() a WebSocketImpl");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void WebSocketImpl::listen(int backlog)
|
void WebSocketImpl::listen(int backlog)
|
||||||
{
|
{
|
||||||
throw Poco::InvalidAccessException("Cannot listen() on a WebSocketImpl");
|
throw Poco::InvalidAccessException("Cannot listen() on a WebSocketImpl");
|
||||||
|
@ -39,20 +39,20 @@ DNSTest::~DNSTest()
|
|||||||
|
|
||||||
void DNSTest::testHostByName()
|
void DNSTest::testHostByName()
|
||||||
{
|
{
|
||||||
HostEntry he1 = DNS::hostByName("aliastest.appinf.com");
|
HostEntry he1 = DNS::hostByName("aliastest.pocoproject.org");
|
||||||
// different systems report different canonical names, unfortunately.
|
// different systems report different canonical names, unfortunately.
|
||||||
assert (he1.name() == "dnstest.appinf.com" || he1.name() == "aliastest.appinf.com");
|
assert (he1.name() == "dnstest.pocoproject.org" || he1.name() == "aliastest.pocoproject.org");
|
||||||
#if !defined(POCO_HAVE_ADDRINFO)
|
#if !defined(POCO_HAVE_ADDRINFO)
|
||||||
// getaddrinfo() does not report any aliases
|
// getaddrinfo() does not report any aliases
|
||||||
assert (!he1.aliases().empty());
|
assert (!he1.aliases().empty());
|
||||||
assert (he1.aliases()[0] == "aliastest.appinf.com");
|
assert (he1.aliases()[0] == "aliastest.pocoproject.org");
|
||||||
#endif
|
#endif
|
||||||
assert (he1.addresses().size() >= 1);
|
assert (he1.addresses().size() >= 1);
|
||||||
assert (he1.addresses()[0].toString() == "1.2.3.4");
|
assert (he1.addresses()[0].toString() == "1.2.3.4");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
HostEntry he1 = DNS::hostByName("nohost.appinf.com");
|
HostEntry he1 = DNS::hostByName("nohost.pocoproject.org");
|
||||||
fail("host not found - must throw");
|
fail("host not found - must throw");
|
||||||
}
|
}
|
||||||
catch (HostNotFoundException&)
|
catch (HostNotFoundException&)
|
||||||
|
@ -51,7 +51,7 @@ void DatagramSocketTest::testEcho()
|
|||||||
UDPEchoServer echoServer;
|
UDPEchoServer echoServer;
|
||||||
DatagramSocket ss;
|
DatagramSocket ss;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
int n = ss.sendBytes("hello", 5);
|
int n = ss.sendBytes("hello", 5);
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
n = ss.receiveBytes(buffer, sizeof(buffer));
|
n = ss.receiveBytes(buffer, sizeof(buffer));
|
||||||
@ -63,9 +63,9 @@ void DatagramSocketTest::testEcho()
|
|||||||
|
|
||||||
void DatagramSocketTest::testSendToReceiveFrom()
|
void DatagramSocketTest::testSendToReceiveFrom()
|
||||||
{
|
{
|
||||||
UDPEchoServer echoServer(SocketAddress("localhost", 0));
|
UDPEchoServer echoServer(SocketAddress("127.0.0.1", 0));
|
||||||
DatagramSocket ss(SocketAddress::IPv4);
|
DatagramSocket ss(SocketAddress::IPv4);
|
||||||
int n = ss.sendTo("hello", 5, SocketAddress("localhost", echoServer.port()));
|
int n = ss.sendTo("hello", 5, SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
SocketAddress sa;
|
SocketAddress sa;
|
||||||
@ -83,7 +83,7 @@ void DatagramSocketTest::testUnbound()
|
|||||||
UDPEchoServer echoServer;
|
UDPEchoServer echoServer;
|
||||||
DatagramSocket ss;
|
DatagramSocket ss;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
int n = ss.sendBytes("hello", 5);
|
int n = ss.sendBytes("hello", 5);
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
n = ss.receiveBytes(buffer, sizeof(buffer));
|
n = ss.receiveBytes(buffer, sizeof(buffer));
|
||||||
|
@ -37,7 +37,7 @@ void DialogSocketTest::testDialogSocket()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
DialogSocket ds;
|
DialogSocket ds;
|
||||||
ds.connect(SocketAddress("localhost", echoServer.port()));
|
ds.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
|
|
||||||
ds.sendMessage("Hello, world!");
|
ds.sendMessage("Hello, world!");
|
||||||
std::string str;
|
std::string str;
|
||||||
|
@ -94,7 +94,7 @@ void FTPClientSessionTest::testLogin1()
|
|||||||
{
|
{
|
||||||
DialogServer server;
|
DialogServer server;
|
||||||
server.addResponse("220 localhost FTP ready");
|
server.addResponse("220 localhost FTP ready");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
assert (session.isOpen());
|
assert (session.isOpen());
|
||||||
assert (!session.isLoggedIn());
|
assert (!session.isLoggedIn());
|
||||||
login(server, session);
|
login(server, session);
|
||||||
@ -125,7 +125,7 @@ void FTPClientSessionTest::testLogin2()
|
|||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
Poco::UInt16 serverPort = server.port();
|
Poco::UInt16 serverPort = server.port();
|
||||||
FTPClientSession session("localhost", serverPort, "user", "password");
|
FTPClientSession session("127.0.0.1", serverPort, "user", "password");
|
||||||
assert (session.isOpen());
|
assert (session.isOpen());
|
||||||
assert (session.isLoggedIn());
|
assert (session.isLoggedIn());
|
||||||
server.addResponse("221 Good Bye");
|
server.addResponse("221 Good Bye");
|
||||||
@ -139,7 +139,7 @@ void FTPClientSessionTest::testLogin2()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
session.open("localhost", serverPort, "user", "password");
|
session.open("127.0.0.1", serverPort, "user", "password");
|
||||||
assert (session.isOpen());
|
assert (session.isOpen());
|
||||||
assert (session.isLoggedIn());
|
assert (session.isLoggedIn());
|
||||||
server.addResponse("221 Good Bye");
|
server.addResponse("221 Good Bye");
|
||||||
@ -159,7 +159,7 @@ void FTPClientSessionTest::testLogin3()
|
|||||||
FTPClientSession session;
|
FTPClientSession session;
|
||||||
assert (!session.isOpen());
|
assert (!session.isOpen());
|
||||||
assert (!session.isLoggedIn());
|
assert (!session.isLoggedIn());
|
||||||
session.open("localhost", server.port(), "user", "password");
|
session.open("127.0.0.1", server.port(), "user", "password");
|
||||||
server.addResponse("221 Good Bye");
|
server.addResponse("221 Good Bye");
|
||||||
session.close();
|
session.close();
|
||||||
assert (!session.isOpen());
|
assert (!session.isOpen());
|
||||||
@ -172,7 +172,7 @@ void FTPClientSessionTest::testLoginFailed1()
|
|||||||
{
|
{
|
||||||
DialogServer server;
|
DialogServer server;
|
||||||
server.addResponse("421 localhost FTP not ready");
|
server.addResponse("421 localhost FTP not ready");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
@ -192,7 +192,7 @@ void FTPClientSessionTest::testLoginFailed2()
|
|||||||
server.addResponse("220 localhost FTP ready");
|
server.addResponse("220 localhost FTP ready");
|
||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("530 Login incorrect");
|
server.addResponse("530 Login incorrect");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
@ -213,7 +213,7 @@ void FTPClientSessionTest::testCommands()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
std::string cmd = server.popCommand();
|
std::string cmd = server.popCommand();
|
||||||
assert (cmd == "USER user");
|
assert (cmd == "USER user");
|
||||||
@ -342,7 +342,7 @@ void FTPClientSessionTest::testDownloadPORT()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.setPassive(false);
|
session.setPassive(false);
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
@ -373,7 +373,7 @@ void FTPClientSessionTest::testDownloadPORT()
|
|||||||
cmd = server.popCommandWait();
|
cmd = server.popCommandWait();
|
||||||
assert (cmd == "RETR test.txt");
|
assert (cmd == "RETR test.txt");
|
||||||
|
|
||||||
SocketAddress sa("localhost", (Poco::UInt16) port);
|
SocketAddress sa("127.0.0.1", (Poco::UInt16) port);
|
||||||
DialogSocket dataSock;
|
DialogSocket dataSock;
|
||||||
dataSock.connect(sa);
|
dataSock.connect(sa);
|
||||||
|
|
||||||
@ -397,7 +397,7 @@ void FTPClientSessionTest::testDownloadEPRT()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.setPassive(false);
|
session.setPassive(false);
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
@ -421,7 +421,7 @@ void FTPClientSessionTest::testDownloadEPRT()
|
|||||||
cmd = server.popCommandWait();
|
cmd = server.popCommandWait();
|
||||||
assert (cmd == "RETR test.txt");
|
assert (cmd == "RETR test.txt");
|
||||||
|
|
||||||
SocketAddress sa("localhost", (Poco::UInt16) port);
|
SocketAddress sa("127.0.0.1", (Poco::UInt16) port);
|
||||||
DialogSocket dataSock;
|
DialogSocket dataSock;
|
||||||
dataSock.connect(sa);
|
dataSock.connect(sa);
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ void FTPClientSessionTest::testDownloadPASV()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
|
|
||||||
@ -478,7 +478,7 @@ void FTPClientSessionTest::testDownloadEPSV()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
|
|
||||||
@ -513,7 +513,7 @@ void FTPClientSessionTest::testUpload()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
|
|
||||||
@ -546,7 +546,7 @@ void FTPClientSessionTest::testList()
|
|||||||
server.addResponse("331 Password required");
|
server.addResponse("331 Password required");
|
||||||
server.addResponse("230 Welcome");
|
server.addResponse("230 Welcome");
|
||||||
server.addResponse("200 Type set to I");
|
server.addResponse("200 Type set to I");
|
||||||
FTPClientSession session("localhost", server.port());
|
FTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "password");
|
session.login("user", "password");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ void FTPStreamFactoryTest::testDownload()
|
|||||||
|
|
||||||
URI uri;
|
URI uri;
|
||||||
uri.setScheme("ftp");
|
uri.setScheme("ftp");
|
||||||
uri.setHost("localhost");
|
uri.setHost("127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
uri.setPath("/test.txt;type=a");
|
uri.setPath("/test.txt;type=a");
|
||||||
FTPStreamFactory sf;
|
FTPStreamFactory sf;
|
||||||
@ -115,7 +115,7 @@ void FTPStreamFactoryTest::testList()
|
|||||||
|
|
||||||
URI uri;
|
URI uri;
|
||||||
uri.setScheme("ftp");
|
uri.setScheme("ftp");
|
||||||
uri.setHost("localhost");
|
uri.setHost("127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
uri.setPath("/usr/guest/data;type=d");
|
uri.setPath("/usr/guest/data;type=d");
|
||||||
FTPStreamFactory sf;
|
FTPStreamFactory sf;
|
||||||
@ -152,7 +152,7 @@ void FTPStreamFactoryTest::testUserInfo()
|
|||||||
|
|
||||||
URI uri;
|
URI uri;
|
||||||
uri.setScheme("ftp");
|
uri.setScheme("ftp");
|
||||||
uri.setHost("localhost");
|
uri.setHost("127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
uri.setPath("/test.txt;type=a");
|
uri.setPath("/test.txt;type=a");
|
||||||
uri.setUserInfo("user:secret");
|
uri.setUserInfo("user:secret");
|
||||||
@ -191,7 +191,7 @@ void FTPStreamFactoryTest::testPasswordProvider()
|
|||||||
|
|
||||||
URI uri;
|
URI uri;
|
||||||
uri.setScheme("ftp");
|
uri.setScheme("ftp");
|
||||||
uri.setHost("localhost");
|
uri.setHost("127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
uri.setPath("/test.txt;type=a");
|
uri.setPath("/test.txt;type=a");
|
||||||
uri.setUserInfo("user");
|
uri.setUserInfo("user");
|
||||||
@ -218,7 +218,7 @@ void FTPStreamFactoryTest::testMissingPasswordProvider()
|
|||||||
|
|
||||||
URI uri;
|
URI uri;
|
||||||
uri.setScheme("ftp");
|
uri.setScheme("ftp");
|
||||||
uri.setHost("localhost");
|
uri.setHost("127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
uri.setPath("/test.txt;type=a");
|
uri.setPath("/test.txt;type=a");
|
||||||
uri.setUserInfo("user");
|
uri.setUserInfo("user");
|
||||||
|
@ -43,7 +43,7 @@ HTTPClientSessionTest::~HTTPClientSessionTest()
|
|||||||
void HTTPClientSessionTest::testGetSmall()
|
void HTTPClientSessionTest::testGetSmall()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -59,7 +59,7 @@ void HTTPClientSessionTest::testGetSmall()
|
|||||||
void HTTPClientSessionTest::testGetLarge()
|
void HTTPClientSessionTest::testGetLarge()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -75,7 +75,7 @@ void HTTPClientSessionTest::testGetLarge()
|
|||||||
void HTTPClientSessionTest::testHead()
|
void HTTPClientSessionTest::testHead()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -90,7 +90,7 @@ void HTTPClientSessionTest::testHead()
|
|||||||
void HTTPClientSessionTest::testPostSmallIdentity()
|
void HTTPClientSessionTest::testPostSmallIdentity()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body\r\n0\r\n");
|
std::string body("this is a random request body\r\n0\r\n");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -107,7 +107,7 @@ void HTTPClientSessionTest::testPostSmallIdentity()
|
|||||||
void HTTPClientSessionTest::testPostLargeIdentity()
|
void HTTPClientSessionTest::testPostLargeIdentity()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(8000, 'x');
|
std::string body(8000, 'x');
|
||||||
body.append("\r\n0\r\n");
|
body.append("\r\n0\r\n");
|
||||||
@ -125,7 +125,7 @@ void HTTPClientSessionTest::testPostLargeIdentity()
|
|||||||
void HTTPClientSessionTest::testPostSmallChunked()
|
void HTTPClientSessionTest::testPostSmallChunked()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body");
|
std::string body("this is a random request body");
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -143,7 +143,7 @@ void HTTPClientSessionTest::testPostSmallChunked()
|
|||||||
void HTTPClientSessionTest::testPostLargeChunked()
|
void HTTPClientSessionTest::testPostLargeChunked()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(16000, 'x');
|
std::string body(16000, 'x');
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -163,7 +163,7 @@ void HTTPClientSessionTest::testPostLargeChunked()
|
|||||||
void HTTPClientSessionTest::testPostSmallClose()
|
void HTTPClientSessionTest::testPostSmallClose()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body");
|
std::string body("this is a random request body");
|
||||||
s.sendRequest(request) << body;
|
s.sendRequest(request) << body;
|
||||||
@ -180,7 +180,7 @@ void HTTPClientSessionTest::testPostSmallClose()
|
|||||||
void HTTPClientSessionTest::testPostLargeClose()
|
void HTTPClientSessionTest::testPostLargeClose()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(8000, 'x');
|
std::string body(8000, 'x');
|
||||||
s.sendRequest(request) << body;
|
s.sendRequest(request) << body;
|
||||||
@ -197,7 +197,7 @@ void HTTPClientSessionTest::testPostLargeClose()
|
|||||||
void HTTPClientSessionTest::testKeepAlive()
|
void HTTPClientSessionTest::testKeepAlive()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
s.setKeepAlive(true);
|
s.setKeepAlive(true);
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
@ -246,7 +246,7 @@ void HTTPClientSessionTest::testProxy()
|
|||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("www.somehost.com");
|
HTTPClientSession s("www.somehost.com");
|
||||||
s.setProxy("localhost", srv.port());
|
s.setProxy("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -263,7 +263,7 @@ void HTTPClientSessionTest::testProxyAuth()
|
|||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("www.somehost.com");
|
HTTPClientSession s("www.somehost.com");
|
||||||
s.setProxy("localhost", srv.port());
|
s.setProxy("127.0.0.1", srv.port());
|
||||||
s.setProxyCredentials("user", "pass");
|
s.setProxyCredentials("user", "pass");
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
@ -286,7 +286,7 @@ void HTTPClientSessionTest::testBypassProxy()
|
|||||||
proxyConfig.port = 80;
|
proxyConfig.port = 80;
|
||||||
proxyConfig.nonProxyHosts = "localhost|127\\.0\\.0\\.1";
|
proxyConfig.nonProxyHosts = "localhost|127\\.0\\.0\\.1";
|
||||||
|
|
||||||
HTTPClientSession s1("localhost", 80);
|
HTTPClientSession s1("127.0.0.1", 80);
|
||||||
s1.setProxyConfig(proxyConfig);
|
s1.setProxyConfig(proxyConfig);
|
||||||
assert (s1.bypassProxy());
|
assert (s1.bypassProxy());
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ void HTTPClientSessionTest::testBypassProxy()
|
|||||||
void HTTPClientSessionTest::testExpectContinue()
|
void HTTPClientSessionTest::testExpectContinue()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/expect");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/expect");
|
||||||
std::string body("this is a random request body\r\n0\r\n");
|
std::string body("this is a random request body\r\n0\r\n");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -324,7 +324,7 @@ void HTTPClientSessionTest::testExpectContinue()
|
|||||||
void HTTPClientSessionTest::testExpectContinueFail()
|
void HTTPClientSessionTest::testExpectContinueFail()
|
||||||
{
|
{
|
||||||
HTTPTestServer srv;
|
HTTPTestServer srv;
|
||||||
HTTPClientSession s("localhost", srv.port());
|
HTTPClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/fail");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/fail");
|
||||||
std::string body("this is a random request body\r\n0\r\n");
|
std::string body("this is a random request body\r\n0\r\n");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
|
@ -146,7 +146,7 @@ void HTTPServerTest::testIdentityRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -169,7 +169,7 @@ void HTTPServerTest::testPutIdentityRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("PUT", "/echoBody");
|
HTTPRequest request("PUT", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -192,7 +192,7 @@ void HTTPServerTest::testChunkedRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -216,7 +216,7 @@ void HTTPServerTest::testClosedRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -236,7 +236,7 @@ void HTTPServerTest::testIdentityRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, 8008);
|
HTTPServer srv(new RequestHandlerFactory, 8008);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", srv.socket().address().port());
|
HTTPClientSession cs("127.0.0.1", srv.socket().address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -267,7 +267,7 @@ void HTTPServerTest::testChunkedRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, 8009);
|
HTTPServer srv(new RequestHandlerFactory, 8009);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", srv.socket().address().port());
|
HTTPClientSession cs("127.0.0.1", srv.socket().address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -299,7 +299,7 @@ void HTTPServerTest::testClosedRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, 8010);
|
HTTPServer srv(new RequestHandlerFactory, 8010);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", srv.socket().address().port());
|
HTTPClientSession cs("127.0.0.1", srv.socket().address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -324,7 +324,7 @@ void HTTPServerTest::testMaxKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -380,7 +380,7 @@ void HTTPServerTest::testKeepAliveTimeout()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
cs.setKeepAliveTimeout(Poco::Timespan(2, 0));
|
cs.setKeepAliveTimeout(Poco::Timespan(2, 0));
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -424,7 +424,7 @@ void HTTPServerTest::test100Continue()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -448,7 +448,7 @@ void HTTPServerTest::testRedirect()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/redirect");
|
HTTPRequest request("GET", "/redirect");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -468,7 +468,7 @@ void HTTPServerTest::testAuth()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/auth");
|
HTTPRequest request("GET", "/auth");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -488,7 +488,7 @@ void HTTPServerTest::testNotImpl()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/notImpl");
|
HTTPRequest request("GET", "/notImpl");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -507,7 +507,7 @@ void HTTPServerTest::testBuffer()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", svs.address().port());
|
HTTPClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/buffer");
|
HTTPRequest request("GET", "/buffer");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
|
@ -44,7 +44,7 @@ void HTTPStreamFactoryTest::testNoRedirect()
|
|||||||
{
|
{
|
||||||
HTTPTestServer server;
|
HTTPTestServer server;
|
||||||
HTTPStreamFactory factory;
|
HTTPStreamFactory factory;
|
||||||
URI uri("http://localhost/large");
|
URI uri("http://127.0.0.1/large");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -57,7 +57,7 @@ void HTTPStreamFactoryTest::testEmptyPath()
|
|||||||
{
|
{
|
||||||
HTTPTestServer server;
|
HTTPTestServer server;
|
||||||
HTTPStreamFactory factory;
|
HTTPStreamFactory factory;
|
||||||
URI uri("http://localhost");
|
URI uri("http://127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -71,7 +71,7 @@ void HTTPStreamFactoryTest::testRedirect()
|
|||||||
HTTPTestServer server;
|
HTTPTestServer server;
|
||||||
Poco::URIStreamOpener opener;
|
Poco::URIStreamOpener opener;
|
||||||
opener.registerStreamFactory("http", new HTTPStreamFactory);
|
opener.registerStreamFactory("http", new HTTPStreamFactory);
|
||||||
URI uri("http://localhost/redirect");
|
URI uri("http://127.0.0.1/redirect");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(opener.open(uri));
|
std::auto_ptr<std::istream> pStr(opener.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -83,7 +83,7 @@ void HTTPStreamFactoryTest::testRedirect()
|
|||||||
void HTTPStreamFactoryTest::testProxy()
|
void HTTPStreamFactoryTest::testProxy()
|
||||||
{
|
{
|
||||||
HTTPTestServer server;
|
HTTPTestServer server;
|
||||||
HTTPStreamFactory factory("localhost", server.port());
|
HTTPStreamFactory factory("127.0.0.1", server.port());
|
||||||
URI uri("http://www.somehost.com/large");
|
URI uri("http://www.somehost.com/large");
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -96,7 +96,7 @@ void HTTPStreamFactoryTest::testError()
|
|||||||
{
|
{
|
||||||
HTTPTestServer server;
|
HTTPTestServer server;
|
||||||
HTTPStreamFactory factory;
|
HTTPStreamFactory factory;
|
||||||
URI uri("http://localhost/notfound");
|
URI uri("http://127.0.0.1/notfound");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -48,9 +48,9 @@ ICMPClientTest::~ICMPClientTest()
|
|||||||
|
|
||||||
void ICMPClientTest::testPing()
|
void ICMPClientTest::testPing()
|
||||||
{
|
{
|
||||||
assert(ICMPClient::pingIPv4("localhost") > 0);
|
assert(ICMPClient::pingIPv4("127.0.0.1") > 0);
|
||||||
|
|
||||||
assert(_icmpClient.ping("localhost") > 0);
|
assert(_icmpClient.ping("127.0.0.1") > 0);
|
||||||
assert(_icmpClient.ping("www.appinf.com", 4) > 0);
|
assert(_icmpClient.ping("www.appinf.com", 4) > 0);
|
||||||
|
|
||||||
// warning: may fail depending on the existence of the addresses at test site
|
// warning: may fail depending on the existence of the addresses at test site
|
||||||
|
@ -42,7 +42,7 @@ void POP3ClientSessionTest::testLogin()
|
|||||||
server.addResponse("+OK USER");
|
server.addResponse("+OK USER");
|
||||||
server.addResponse("+OK PASS");
|
server.addResponse("+OK PASS");
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
std::string cmd = server.popCommand();
|
std::string cmd = server.popCommand();
|
||||||
assert (cmd == "USER user");
|
assert (cmd == "USER user");
|
||||||
@ -61,7 +61,7 @@ void POP3ClientSessionTest::testLoginFail()
|
|||||||
server.addResponse("+OK USER");
|
server.addResponse("+OK USER");
|
||||||
server.addResponse("-ERR PASS");
|
server.addResponse("-ERR PASS");
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
@ -82,7 +82,7 @@ void POP3ClientSessionTest::testMessageCount()
|
|||||||
server.addResponse("+OK PASS");
|
server.addResponse("+OK PASS");
|
||||||
server.addResponse("+OK 42 12345");
|
server.addResponse("+OK 42 12345");
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
int n = session.messageCount();
|
int n = session.messageCount();
|
||||||
@ -107,7 +107,7 @@ void POP3ClientSessionTest::testList()
|
|||||||
".\r\n"
|
".\r\n"
|
||||||
);
|
);
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
std::vector<POP3ClientSession::MessageInfo> infos;
|
std::vector<POP3ClientSession::MessageInfo> infos;
|
||||||
@ -146,7 +146,7 @@ void POP3ClientSessionTest::testRetrieveMessage()
|
|||||||
".\r\n"
|
".\r\n"
|
||||||
);
|
);
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
MailMessage message;
|
MailMessage message;
|
||||||
@ -182,7 +182,7 @@ void POP3ClientSessionTest::testRetrieveHeader()
|
|||||||
"."
|
"."
|
||||||
);
|
);
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
MessageHeader header;
|
MessageHeader header;
|
||||||
@ -225,7 +225,7 @@ void POP3ClientSessionTest::testRetrieveMessages()
|
|||||||
"."
|
"."
|
||||||
);
|
);
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
MessageHeader header;
|
MessageHeader header;
|
||||||
@ -261,7 +261,7 @@ void POP3ClientSessionTest::testDeleteMessage()
|
|||||||
server.addResponse("+OK PASS");
|
server.addResponse("+OK PASS");
|
||||||
server.addResponse("+OK DELETED");
|
server.addResponse("+OK DELETED");
|
||||||
server.addResponse("+OK QUIT");
|
server.addResponse("+OK QUIT");
|
||||||
POP3ClientSession session("localhost", server.port());
|
POP3ClientSession session("127.0.0.1", server.port());
|
||||||
session.login("user", "secret");
|
session.login("user", "secret");
|
||||||
server.clearCommands();
|
server.clearCommands();
|
||||||
session.deleteMessage(42);
|
session.deleteMessage(42);
|
||||||
|
@ -45,7 +45,7 @@ RawSocketTest::~RawSocketTest()
|
|||||||
|
|
||||||
void RawSocketTest::testEchoIPv4()
|
void RawSocketTest::testEchoIPv4()
|
||||||
{
|
{
|
||||||
SocketAddress sa("localhost", 0);
|
SocketAddress sa("127.0.0.1", 0);
|
||||||
RawSocket rs(IPAddress::IPv4);
|
RawSocket rs(IPAddress::IPv4);
|
||||||
rs.connect(sa);
|
rs.connect(sa);
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ void RawSocketTest::testSendToReceiveFromIPv4()
|
|||||||
{
|
{
|
||||||
RawSocket rs(IPAddress::IPv4);
|
RawSocket rs(IPAddress::IPv4);
|
||||||
|
|
||||||
int n = rs.sendTo("hello", 5, SocketAddress("localhost", 0));
|
int n = rs.sendTo("hello", 5, SocketAddress("127.0.0.1", 0));
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
|
|
||||||
char buffer[256] = "";
|
char buffer[256] = "";
|
||||||
|
@ -42,7 +42,7 @@ void SMTPClientSessionTest::testLoginEHLO()
|
|||||||
server.addResponse("220 localhost SMTP ready");
|
server.addResponse("220 localhost SMTP ready");
|
||||||
server.addResponse("250 Hello localhost");
|
server.addResponse("250 Hello localhost");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
std::string cmd = server.popCommand();
|
std::string cmd = server.popCommand();
|
||||||
assert (cmd == "EHLO localhost");
|
assert (cmd == "EHLO localhost");
|
||||||
@ -59,7 +59,7 @@ void SMTPClientSessionTest::testLoginHELO()
|
|||||||
server.addResponse("500 EHLO not understood");
|
server.addResponse("500 EHLO not understood");
|
||||||
server.addResponse("250 Hello localhost");
|
server.addResponse("250 Hello localhost");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
std::string cmd = server.popCommand();
|
std::string cmd = server.popCommand();
|
||||||
assert (cmd == "EHLO localhost");
|
assert (cmd == "EHLO localhost");
|
||||||
@ -76,7 +76,7 @@ void SMTPClientSessionTest::testLoginFailed()
|
|||||||
DialogServer server;
|
DialogServer server;
|
||||||
server.addResponse("500 No SMTP service here");
|
server.addResponse("500 No SMTP service here");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
@ -99,7 +99,7 @@ void SMTPClientSessionTest::testSend()
|
|||||||
server.addResponse("354 Send data");
|
server.addResponse("354 Send data");
|
||||||
server.addResponse("250 OK");
|
server.addResponse("250 OK");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
|
|
||||||
MailMessage message;
|
MailMessage message;
|
||||||
@ -153,7 +153,7 @@ void SMTPClientSessionTest::testSendMultiRecipient()
|
|||||||
server.addResponse("250 OK");
|
server.addResponse("250 OK");
|
||||||
server.addResponse("250 OK");
|
server.addResponse("250 OK");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
|
|
||||||
MailMessage message;
|
MailMessage message;
|
||||||
@ -218,7 +218,7 @@ void SMTPClientSessionTest::testMultiSeparateRecipient()
|
|||||||
server.addResponse("250 OK");
|
server.addResponse("250 OK");
|
||||||
server.addResponse("250 OK");
|
server.addResponse("250 OK");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
|
|
||||||
MailMessage message;
|
MailMessage message;
|
||||||
@ -285,7 +285,7 @@ void SMTPClientSessionTest::testSendFailed()
|
|||||||
server.addResponse("354 Send data");
|
server.addResponse("354 Send data");
|
||||||
server.addResponse("500 Error");
|
server.addResponse("500 Error");
|
||||||
server.addResponse("221 Bye");
|
server.addResponse("221 Bye");
|
||||||
SMTPClientSession session("localhost", server.port());
|
SMTPClientSession session("127.0.0.1", server.port());
|
||||||
session.login("localhost");
|
session.login("localhost");
|
||||||
|
|
||||||
MailMessage message;
|
MailMessage message;
|
||||||
|
@ -23,6 +23,7 @@ using Poco::Net::InvalidAddressException;
|
|||||||
using Poco::Net::HostNotFoundException;
|
using Poco::Net::HostNotFoundException;
|
||||||
using Poco::Net::ServiceNotFoundException;
|
using Poco::Net::ServiceNotFoundException;
|
||||||
using Poco::Net::NoAddressFoundException;
|
using Poco::Net::NoAddressFoundException;
|
||||||
|
using Poco::Net::AddressFamilyMismatchException;
|
||||||
using Poco::InvalidArgumentException;
|
using Poco::InvalidArgumentException;
|
||||||
|
|
||||||
|
|
||||||
@ -68,10 +69,10 @@ void SocketAddressTest::testSocketAddress()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketAddress sa4("www.appinf.com", 80);
|
SocketAddress sa4("pocoproject.org", 80);
|
||||||
assert (sa4.host().toString() == "162.209.7.4");
|
assert (sa4.host().toString() == "162.209.7.4");
|
||||||
assert (sa4.port() == 80);
|
assert (sa4.port() == 80);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SocketAddress sa5("192.168.2.260", 80);
|
SocketAddress sa5("192.168.2.260", 80);
|
||||||
@ -118,6 +119,24 @@ void SocketAddressTest::testSocketAddress()
|
|||||||
catch (InvalidArgumentException&)
|
catch (InvalidArgumentException&)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SocketAddress sa10("www6.pocoproject.org", 80);
|
||||||
|
assert (sa10.host().toString() == "162.209.7.4" || sa10.host().toString() == "[2001:4801:7819:74:be76:4eff:fe10:6b73]");
|
||||||
|
|
||||||
|
SocketAddress sa11(SocketAddress::IPv4, "www6.pocoproject.org", 80);
|
||||||
|
assert (sa11.host().toString() == "162.209.7.4");
|
||||||
|
|
||||||
|
#ifdef POCO_HAVE_IPv6
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SocketAddress sa12(SocketAddress::IPv6, "www6.pocoproject.org", 80);
|
||||||
|
assert (sa12.host().toString() == "2001:4801:7819:74:be76:4eff:fe10:6b73");
|
||||||
|
}
|
||||||
|
catch (AddressFamilyMismatchException&)
|
||||||
|
{
|
||||||
|
// may happen if no IPv6 address is configured on the system
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ void SocketReactorTest::testSocketReactor()
|
|||||||
ServerSocket ss(ssa);
|
ServerSocket ss(ssa);
|
||||||
SocketReactor reactor;
|
SocketReactor reactor;
|
||||||
SocketAcceptor<EchoServiceHandler> acceptor(ss, reactor);
|
SocketAcceptor<EchoServiceHandler> acceptor(ss, reactor);
|
||||||
SocketAddress sa("localhost", ss.address().port());
|
SocketAddress sa("127.0.0.1", ss.address().port());
|
||||||
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
||||||
ClientServiceHandler::setOnce(true);
|
ClientServiceHandler::setOnce(true);
|
||||||
ClientServiceHandler::resetData();
|
ClientServiceHandler::resetData();
|
||||||
@ -334,7 +334,7 @@ void SocketReactorTest::testSetSocketReactor()
|
|||||||
SocketReactor reactor;
|
SocketReactor reactor;
|
||||||
SocketAcceptor<EchoServiceHandler> acceptor(ss);
|
SocketAcceptor<EchoServiceHandler> acceptor(ss);
|
||||||
acceptor.setReactor(reactor);
|
acceptor.setReactor(reactor);
|
||||||
SocketAddress sa("localhost", ss.address().port());
|
SocketAddress sa("127.0.0.1", ss.address().port());
|
||||||
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
||||||
ClientServiceHandler::setOnce(true);
|
ClientServiceHandler::setOnce(true);
|
||||||
ClientServiceHandler::resetData();
|
ClientServiceHandler::resetData();
|
||||||
@ -353,7 +353,7 @@ void SocketReactorTest::testParallelSocketReactor()
|
|||||||
ServerSocket ss(ssa);
|
ServerSocket ss(ssa);
|
||||||
SocketReactor reactor;
|
SocketReactor reactor;
|
||||||
ParallelSocketAcceptor<EchoServiceHandler, SocketReactor> acceptor(ss, reactor);
|
ParallelSocketAcceptor<EchoServiceHandler, SocketReactor> acceptor(ss, reactor);
|
||||||
SocketAddress sa("localhost", ss.address().port());
|
SocketAddress sa("127.0.0.1", ss.address().port());
|
||||||
SocketConnector<ClientServiceHandler> connector1(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector1(sa, reactor);
|
||||||
SocketConnector<ClientServiceHandler> connector2(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector2(sa, reactor);
|
||||||
SocketConnector<ClientServiceHandler> connector3(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector3(sa, reactor);
|
||||||
@ -390,7 +390,7 @@ void SocketReactorTest::testSocketConnectorTimeout()
|
|||||||
SocketAddress ssa;
|
SocketAddress ssa;
|
||||||
ServerSocket ss(ssa);
|
ServerSocket ss(ssa);
|
||||||
SocketReactor reactor;
|
SocketReactor reactor;
|
||||||
SocketAddress sa("localhost", ss.address().port());
|
SocketAddress sa("127.0.0.1", ss.address().port());
|
||||||
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
SocketConnector<ClientServiceHandler> connector(sa, reactor);
|
||||||
reactor.run();
|
reactor.run();
|
||||||
assert (ClientServiceHandler::timeout());
|
assert (ClientServiceHandler::timeout());
|
||||||
|
@ -49,7 +49,7 @@ void SocketStreamTest::testStreamEcho()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
SocketStream str(ss);
|
SocketStream str(ss);
|
||||||
str << "hello";
|
str << "hello";
|
||||||
assert (str.good());
|
assert (str.good());
|
||||||
@ -72,7 +72,7 @@ void SocketStreamTest::testLargeStreamEcho()
|
|||||||
const int msgSize = 64000;
|
const int msgSize = 64000;
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
SocketStream str(ss);
|
SocketStream str(ss);
|
||||||
ss.setSendBufferSize(msgSize);
|
ss.setSendBufferSize(msgSize);
|
||||||
ss.setReceiveBufferSize(msgSize);
|
ss.setReceiveBufferSize(msgSize);
|
||||||
@ -100,7 +100,7 @@ void SocketStreamTest::testEOF()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
|
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
str << "hello";
|
str << "hello";
|
||||||
assert (str.good());
|
assert (str.good());
|
||||||
str.flush();
|
str.flush();
|
||||||
|
@ -55,7 +55,7 @@ void SocketTest::testEcho()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
int n = ss.sendBytes("hello", 5);
|
int n = ss.sendBytes("hello", 5);
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
@ -70,7 +70,7 @@ void SocketTest::testPoll()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
Stopwatch sw;
|
Stopwatch sw;
|
||||||
sw.start();
|
sw.start();
|
||||||
Timespan timeout(1000000);
|
Timespan timeout(1000000);
|
||||||
@ -95,7 +95,7 @@ void SocketTest::testAvailable()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
Timespan timeout(1000000);
|
Timespan timeout(1000000);
|
||||||
ss.sendBytes("hello", 5);
|
ss.sendBytes("hello", 5);
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
@ -135,7 +135,7 @@ void SocketTest::testFIFOBuffer()
|
|||||||
|
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
int n = ss.sendBytes(f);
|
int n = ss.sendBytes(f);
|
||||||
assert (n == 5);
|
assert (n == 5);
|
||||||
assert(1 == _notToReadable);
|
assert(1 == _notToReadable);
|
||||||
@ -172,7 +172,7 @@ void SocketTest::testConnect()
|
|||||||
serv.listen();
|
serv.listen();
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
Timespan timeout(250000);
|
Timespan timeout(250000);
|
||||||
ss.connect(SocketAddress("localhost", serv.address().port()), timeout);
|
ss.connect(SocketAddress("127.0.0.1", serv.address().port()), timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ void SocketTest::testConnectRefused()
|
|||||||
Timespan timeout(250000);
|
Timespan timeout(250000);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ss.connect(SocketAddress("localhost", port));
|
ss.connect(SocketAddress("127.0.0.1", port));
|
||||||
fail("connection refused - must throw");
|
fail("connection refused - must throw");
|
||||||
}
|
}
|
||||||
catch (ConnectionRefusedException&)
|
catch (ConnectionRefusedException&)
|
||||||
@ -207,7 +207,7 @@ void SocketTest::testConnectRefusedNB()
|
|||||||
Timespan timeout(2, 0);
|
Timespan timeout(2, 0);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ss.connect(SocketAddress("localhost", port), timeout);
|
ss.connect(SocketAddress("127.0.0.1", port), timeout);
|
||||||
fail("connection refused - must throw");
|
fail("connection refused - must throw");
|
||||||
}
|
}
|
||||||
catch (TimeoutException&)
|
catch (TimeoutException&)
|
||||||
@ -223,7 +223,7 @@ void SocketTest::testNonBlocking()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
ss.setBlocking(false);
|
ss.setBlocking(false);
|
||||||
|
|
||||||
Timespan timeout(1000000);
|
Timespan timeout(1000000);
|
||||||
@ -247,7 +247,7 @@ void SocketTest::testAddress()
|
|||||||
serv.bind(SocketAddress());
|
serv.bind(SocketAddress());
|
||||||
serv.listen();
|
serv.listen();
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", serv.address().port()));
|
ss.connect(SocketAddress("127.0.0.1", serv.address().port()));
|
||||||
StreamSocket css = serv.acceptConnection();
|
StreamSocket css = serv.acceptConnection();
|
||||||
assert (css.peerAddress().host() == ss.address().host());
|
assert (css.peerAddress().host() == ss.address().host());
|
||||||
assert (css.peerAddress().port() == ss.address().port());
|
assert (css.peerAddress().port() == ss.address().port());
|
||||||
@ -309,7 +309,7 @@ void SocketTest::testTimeout()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
|
|
||||||
Timespan timeout0 = ss.getReceiveTimeout();
|
Timespan timeout0 = ss.getReceiveTimeout();
|
||||||
Timespan timeout(250000);
|
Timespan timeout(250000);
|
||||||
@ -347,7 +347,7 @@ void SocketTest::testTimeout()
|
|||||||
void SocketTest::testBufferSize()
|
void SocketTest::testBufferSize()
|
||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
SocketAddress sa("localhost", 1234);
|
SocketAddress sa("127.0.0.1", 1234);
|
||||||
StreamSocket ss(sa.family());
|
StreamSocket ss(sa.family());
|
||||||
|
|
||||||
int osz = ss.getSendBufferSize();
|
int osz = ss.getSendBufferSize();
|
||||||
@ -371,7 +371,7 @@ void SocketTest::testOptions()
|
|||||||
{
|
{
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
|
|
||||||
ss.setLinger(true, 20);
|
ss.setLinger(true, 20);
|
||||||
bool f;
|
bool f;
|
||||||
@ -405,7 +405,7 @@ void SocketTest::testSelect()
|
|||||||
|
|
||||||
EchoServer echoServer;
|
EchoServer echoServer;
|
||||||
StreamSocket ss;
|
StreamSocket ss;
|
||||||
ss.connect(SocketAddress("localhost", echoServer.port()));
|
ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
|
||||||
|
|
||||||
Socket::SocketList readList;
|
Socket::SocketList readList;
|
||||||
Socket::SocketList writeList;
|
Socket::SocketList writeList;
|
||||||
@ -442,8 +442,8 @@ void SocketTest::testSelect2()
|
|||||||
|
|
||||||
EchoServer echoServer1;
|
EchoServer echoServer1;
|
||||||
EchoServer echoServer2;
|
EchoServer echoServer2;
|
||||||
StreamSocket ss1(SocketAddress("localhost", echoServer1.port()));
|
StreamSocket ss1(SocketAddress("127.0.0.1", echoServer1.port()));
|
||||||
StreamSocket ss2(SocketAddress("localhost", echoServer2.port()));
|
StreamSocket ss2(SocketAddress("127.0.0.1", echoServer2.port()));
|
||||||
|
|
||||||
Socket::SocketList readList;
|
Socket::SocketList readList;
|
||||||
Socket::SocketList writeList;
|
Socket::SocketList writeList;
|
||||||
|
@ -125,7 +125,7 @@ SyslogTest::~SyslogTest()
|
|||||||
void SyslogTest::testListener()
|
void SyslogTest::testListener()
|
||||||
{
|
{
|
||||||
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
||||||
channel->setProperty("loghost", "localhost:51400");
|
channel->setProperty("loghost", "127.0.0.1:51400");
|
||||||
channel->open();
|
channel->open();
|
||||||
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
||||||
listener->open();
|
listener->open();
|
||||||
@ -150,7 +150,7 @@ void SyslogTest::testListener()
|
|||||||
void SyslogTest::testChannelOpenClose()
|
void SyslogTest::testChannelOpenClose()
|
||||||
{
|
{
|
||||||
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
||||||
channel->setProperty("loghost", "localhost:51400");
|
channel->setProperty("loghost", "127.0.0.1:51400");
|
||||||
channel->open();
|
channel->open();
|
||||||
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
||||||
listener->open();
|
listener->open();
|
||||||
@ -189,7 +189,7 @@ void SyslogTest::testChannelOpenClose()
|
|||||||
void SyslogTest::testOldBSD()
|
void SyslogTest::testOldBSD()
|
||||||
{
|
{
|
||||||
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
|
||||||
channel->setProperty("loghost", "localhost:51400");
|
channel->setProperty("loghost", "127.0.0.1:51400");
|
||||||
channel->setProperty("format", "bsd");
|
channel->setProperty("format", "bsd");
|
||||||
channel->open();
|
channel->open();
|
||||||
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
|
|
||||||
using Poco::Net::TCPServer;
|
using Poco::Net::TCPServer;
|
||||||
|
using Poco::Net::TCPServerConnectionFilter;
|
||||||
using Poco::Net::TCPServerConnection;
|
using Poco::Net::TCPServerConnection;
|
||||||
using Poco::Net::TCPServerConnectionFactory;
|
using Poco::Net::TCPServerConnectionFactory;
|
||||||
using Poco::Net::TCPServerConnectionFactoryImpl;
|
using Poco::Net::TCPServerConnectionFactoryImpl;
|
||||||
@ -62,6 +63,15 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RejectFilter: public TCPServerConnectionFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool accept(const StreamSocket&)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,7 +94,7 @@ void TCPServerTest::testOneConnection()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", srv.socket().address().port());
|
SocketAddress sa("127.0.0.1", srv.socket().address().port());
|
||||||
StreamSocket ss1(sa);
|
StreamSocket ss1(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
ss1.sendBytes(data.data(), (int) data.size());
|
ss1.sendBytes(data.data(), (int) data.size());
|
||||||
@ -111,7 +121,7 @@ void TCPServerTest::testTwoConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", srv.socket().address().port());
|
SocketAddress sa("127.0.0.1", srv.socket().address().port());
|
||||||
StreamSocket ss1(sa);
|
StreamSocket ss1(sa);
|
||||||
StreamSocket ss2(sa);
|
StreamSocket ss2(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
@ -159,7 +169,7 @@ void TCPServerTest::testMultiConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
StreamSocket ss1(sa);
|
StreamSocket ss1(sa);
|
||||||
StreamSocket ss2(sa);
|
StreamSocket ss2(sa);
|
||||||
StreamSocket ss3(sa);
|
StreamSocket ss3(sa);
|
||||||
@ -233,7 +243,9 @@ void TCPServerTest::testMultiConnections()
|
|||||||
assert (srv.currentConnections() == 0);
|
assert (srv.currentConnections() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPServerTest::testThreadCapacity(){
|
|
||||||
|
void TCPServerTest::testThreadCapacity()
|
||||||
|
{
|
||||||
ServerSocket svs(0);
|
ServerSocket svs(0);
|
||||||
TCPServerParams* pParams = new TCPServerParams;
|
TCPServerParams* pParams = new TCPServerParams;
|
||||||
pParams->setMaxThreads(64);
|
pParams->setMaxThreads(64);
|
||||||
@ -243,6 +255,29 @@ void TCPServerTest::testThreadCapacity(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TCPServerTest::testFilter()
|
||||||
|
{
|
||||||
|
TCPServer srv(new TCPServerConnectionFactoryImpl<EchoConnection>());
|
||||||
|
srv.setConnectionFilter(new RejectFilter);
|
||||||
|
srv.start();
|
||||||
|
assert (srv.currentConnections() == 0);
|
||||||
|
assert (srv.currentThreads() == 0);
|
||||||
|
assert (srv.queuedConnections() == 0);
|
||||||
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
|
SocketAddress sa("127.0.0.1", srv.socket().address().port());
|
||||||
|
StreamSocket ss(sa);
|
||||||
|
|
||||||
|
char buffer[256];
|
||||||
|
int n = ss.receiveBytes(buffer, sizeof(buffer));
|
||||||
|
|
||||||
|
assert (n == 0);
|
||||||
|
assert (srv.currentConnections() == 0);
|
||||||
|
assert (srv.currentThreads() == 0);
|
||||||
|
assert (srv.queuedConnections() == 0);
|
||||||
|
assert (srv.totalConnections() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TCPServerTest::setUp()
|
void TCPServerTest::setUp()
|
||||||
{
|
{
|
||||||
@ -262,6 +297,7 @@ CppUnit::Test* TCPServerTest::suite()
|
|||||||
CppUnit_addTest(pSuite, TCPServerTest, testTwoConnections);
|
CppUnit_addTest(pSuite, TCPServerTest, testTwoConnections);
|
||||||
CppUnit_addTest(pSuite, TCPServerTest, testMultiConnections);
|
CppUnit_addTest(pSuite, TCPServerTest, testMultiConnections);
|
||||||
CppUnit_addTest(pSuite, TCPServerTest, testThreadCapacity);
|
CppUnit_addTest(pSuite, TCPServerTest, testThreadCapacity);
|
||||||
|
CppUnit_addTest(pSuite, TCPServerTest, testFilter);
|
||||||
|
|
||||||
return pSuite;
|
return pSuite;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ public:
|
|||||||
void testTwoConnections();
|
void testTwoConnections();
|
||||||
void testMultiConnections();
|
void testMultiConnections();
|
||||||
void testThreadCapacity();
|
void testThreadCapacity();
|
||||||
|
void testFilter();
|
||||||
|
|
||||||
void setUp();
|
void setUp();
|
||||||
void tearDown();
|
void tearDown();
|
||||||
|
@ -119,7 +119,7 @@ void WebSocketTest::testWebSocket()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", ss.address().port());
|
HTTPClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
@ -200,7 +200,7 @@ void WebSocketTest::testWebSocketLarge()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", ss.address().port());
|
HTTPClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
@ -232,7 +232,7 @@ void WebSocketTest::testOneLargeFrame(int msgSize)
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPClientSession cs("localhost", ss.address().port());
|
HTTPClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws", HTTPRequest::HTTP_1_1);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
|
@ -494,6 +494,17 @@ void Context::initDH(const std::string& dhParamsFile)
|
|||||||
std::string msg = Utility::getLastError();
|
std::string msg = Utility::getLastError();
|
||||||
throw SSLContextException("Error creating Diffie-Hellman parameters", msg);
|
throw SSLContextException("Error creating Diffie-Hellman parameters", msg);
|
||||||
}
|
}
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||||
|
BIGNUM* p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
|
||||||
|
BIGNUM* g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
|
||||||
|
DH_set0_pqg(dh, p, 0, g);
|
||||||
|
DH_set_length(dh, 160);
|
||||||
|
if (!p || !g)
|
||||||
|
{
|
||||||
|
DH_free(dh);
|
||||||
|
throw SSLContextException("Error creating Diffie-Hellman parameters");
|
||||||
|
}
|
||||||
|
#else
|
||||||
dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
|
dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
|
||||||
dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
|
dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
|
||||||
dh->length = 160;
|
dh->length = 160;
|
||||||
@ -502,6 +513,7 @@ void Context::initDH(const std::string& dhParamsFile)
|
|||||||
DH_free(dh);
|
DH_free(dh);
|
||||||
throw SSLContextException("Error creating Diffie-Hellman parameters");
|
throw SSLContextException("Error creating Diffie-Hellman parameters");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
SSL_CTX_set_tmp_dh(_pSSLContext, dh);
|
SSL_CTX_set_tmp_dh(_pSSLContext, dh);
|
||||||
SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_DH_USE);
|
SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_DH_USE);
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include "Poco/UnbufferedStreamBuf.h"
|
#include "Poco/UnbufferedStreamBuf.h"
|
||||||
#include "Poco/NullStream.h"
|
#include "Poco/NullStream.h"
|
||||||
#include "Poco/StreamCopier.h"
|
#include "Poco/StreamCopier.h"
|
||||||
|
#include "Poco/Format.h"
|
||||||
|
#include "Poco/Version.h"
|
||||||
|
|
||||||
|
|
||||||
using Poco::URIStreamFactory;
|
using Poco::URIStreamFactory;
|
||||||
@ -118,6 +120,12 @@ std::istream* HTTPSStreamFactory::open(const URI& uri)
|
|||||||
cred.authenticate(req, res);
|
cred.authenticate(req, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.set("User-Agent", Poco::format("poco/%d.%d.%d",
|
||||||
|
(POCO_VERSION >> 24) & 0xFF,
|
||||||
|
(POCO_VERSION >> 16) & 0xFF,
|
||||||
|
(POCO_VERSION >> 8) & 0xFF));
|
||||||
|
req.set("Accept", "*/*");
|
||||||
|
|
||||||
pSession->sendRequest(req);
|
pSession->sendRequest(req);
|
||||||
std::istream& rs = pSession->receiveResponse(res);
|
std::istream& rs = pSession->receiveResponse(res);
|
||||||
bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
|
bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
|
||||||
|
@ -93,7 +93,7 @@ HTTPSClientSessionTest::~HTTPSClientSessionTest()
|
|||||||
void HTTPSClientSessionTest::testGetSmall()
|
void HTTPSClientSessionTest::testGetSmall()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -109,7 +109,7 @@ void HTTPSClientSessionTest::testGetSmall()
|
|||||||
void HTTPSClientSessionTest::testGetLarge()
|
void HTTPSClientSessionTest::testGetLarge()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -125,7 +125,7 @@ void HTTPSClientSessionTest::testGetLarge()
|
|||||||
void HTTPSClientSessionTest::testHead()
|
void HTTPSClientSessionTest::testHead()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -140,7 +140,7 @@ void HTTPSClientSessionTest::testHead()
|
|||||||
void HTTPSClientSessionTest::testPostSmallIdentity()
|
void HTTPSClientSessionTest::testPostSmallIdentity()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body\r\n0\r\n");
|
std::string body("this is a random request body\r\n0\r\n");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -157,7 +157,7 @@ void HTTPSClientSessionTest::testPostSmallIdentity()
|
|||||||
void HTTPSClientSessionTest::testPostLargeIdentity()
|
void HTTPSClientSessionTest::testPostLargeIdentity()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(8000, 'x');
|
std::string body(8000, 'x');
|
||||||
body.append("\r\n0\r\n");
|
body.append("\r\n0\r\n");
|
||||||
@ -175,7 +175,7 @@ void HTTPSClientSessionTest::testPostLargeIdentity()
|
|||||||
void HTTPSClientSessionTest::testPostSmallChunked()
|
void HTTPSClientSessionTest::testPostSmallChunked()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body");
|
std::string body("this is a random request body");
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -193,7 +193,7 @@ void HTTPSClientSessionTest::testPostSmallChunked()
|
|||||||
void HTTPSClientSessionTest::testPostLargeChunked()
|
void HTTPSClientSessionTest::testPostLargeChunked()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(16000, 'x');
|
std::string body(16000, 'x');
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -215,7 +215,7 @@ void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive()
|
|||||||
srv.start();
|
srv.start();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
s.setKeepAlive(true);
|
s.setKeepAlive(true);
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
@ -244,7 +244,7 @@ void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive()
|
|||||||
void HTTPSClientSessionTest::testKeepAlive()
|
void HTTPSClientSessionTest::testKeepAlive()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
s.setKeepAlive(true);
|
s.setKeepAlive(true);
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
@ -359,7 +359,7 @@ void HTTPSClientSessionTest::testCachedSession()
|
|||||||
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
|
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
|
||||||
pClientContext->enableSessionCache(true);
|
pClientContext->enableSessionCache(true);
|
||||||
|
|
||||||
HTTPSClientSession s1("localhost", srv.port(), pClientContext);
|
HTTPSClientSession s1("127.0.0.1", srv.port(), pClientContext);
|
||||||
HTTPRequest request1(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request1(HTTPRequest::HTTP_GET, "/small");
|
||||||
s1.sendRequest(request1);
|
s1.sendRequest(request1);
|
||||||
Session::Ptr pSession1 = s1.sslSession();
|
Session::Ptr pSession1 = s1.sslSession();
|
||||||
@ -371,7 +371,7 @@ void HTTPSClientSessionTest::testCachedSession()
|
|||||||
StreamCopier::copyStream(rs1, ostr1);
|
StreamCopier::copyStream(rs1, ostr1);
|
||||||
assert (ostr1.str() == HTTPSTestServer::SMALL_BODY);
|
assert (ostr1.str() == HTTPSTestServer::SMALL_BODY);
|
||||||
|
|
||||||
HTTPSClientSession s2("localhost", srv.port(), pClientContext, pSession1);
|
HTTPSClientSession s2("127.0.0.1", srv.port(), pClientContext, pSession1);
|
||||||
HTTPRequest request2(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request2(HTTPRequest::HTTP_GET, "/small");
|
||||||
s2.sendRequest(request2);
|
s2.sendRequest(request2);
|
||||||
Session::Ptr pSession2 = s2.sslSession();
|
Session::Ptr pSession2 = s2.sslSession();
|
||||||
@ -419,7 +419,7 @@ void HTTPSClientSessionTest::testCachedSession()
|
|||||||
void HTTPSClientSessionTest::testUnknownContentLength()
|
void HTTPSClientSessionTest::testUnknownContentLength()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -435,7 +435,7 @@ void HTTPSClientSessionTest::testUnknownContentLength()
|
|||||||
void HTTPSClientSessionTest::testServerAbort()
|
void HTTPSClientSessionTest::testServerAbort()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength/connection/abort");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength/connection/abort");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
|
@ -133,7 +133,7 @@ void HTTPSServerTest::testIdentityRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -156,7 +156,7 @@ void HTTPSServerTest::testChunkedRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -180,7 +180,7 @@ void HTTPSServerTest::testIdentityRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -214,7 +214,7 @@ void HTTPSServerTest::testChunkedRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -249,7 +249,7 @@ void HTTPSServerTest::test100Continue()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -273,7 +273,7 @@ void HTTPSServerTest::testRedirect()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/redirect");
|
HTTPRequest request("GET", "/redirect");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -293,7 +293,7 @@ void HTTPSServerTest::testAuth()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/auth");
|
HTTPRequest request("GET", "/auth");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -313,7 +313,7 @@ void HTTPSServerTest::testNotImpl()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/notImpl");
|
HTTPRequest request("GET", "/notImpl");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
|
@ -48,7 +48,7 @@ void HTTPSStreamFactoryTest::testNoRedirect()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/large");
|
URI uri("https://127.0.0.1/large");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -61,7 +61,7 @@ void HTTPSStreamFactoryTest::testEmptyPath()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost");
|
URI uri("https://127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -74,7 +74,7 @@ void HTTPSStreamFactoryTest::testRedirect()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/redirect");
|
URI uri("https://127.0.0.1/redirect");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -103,7 +103,7 @@ void HTTPSStreamFactoryTest::testError()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/notfound");
|
URI uri("https://127.0.0.1/notfound");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -95,7 +95,7 @@ void TCPServerTest::testOneConnection()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
ss1.sendBytes(data.data(), (int) data.size());
|
ss1.sendBytes(data.data(), (int) data.size());
|
||||||
@ -123,7 +123,7 @@ void TCPServerTest::testTwoConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
SecureStreamSocket ss2(sa);
|
SecureStreamSocket ss2(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
@ -170,7 +170,7 @@ void TCPServerTest::testMultiConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
SecureStreamSocket ss2(sa);
|
SecureStreamSocket ss2(sa);
|
||||||
SecureStreamSocket ss3(sa);
|
SecureStreamSocket ss3(sa);
|
||||||
@ -259,7 +259,7 @@ void TCPServerTest::testReuseSocket()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
ss1.sendBytes(data.data(), (int) data.size());
|
ss1.sendBytes(data.data(), (int) data.size());
|
||||||
@ -328,7 +328,7 @@ void TCPServerTest::testReuseSession()
|
|||||||
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
|
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
|
||||||
pClientContext->enableSessionCache(true);
|
pClientContext->enableSessionCache(true);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa, pClientContext);
|
SecureStreamSocket ss1(sa, pClientContext);
|
||||||
assert (!ss1.sessionWasReused());
|
assert (!ss1.sessionWasReused());
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
|
@ -119,7 +119,7 @@ void WebSocketTest::testWebSocket()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", ss.address().port());
|
HTTPSClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
@ -186,7 +186,7 @@ void WebSocketTest::testWebSocketLarge()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", ss.address().port());
|
HTTPSClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
|
@ -92,7 +92,7 @@ HTTPSClientSessionTest::~HTTPSClientSessionTest()
|
|||||||
void HTTPSClientSessionTest::testGetSmall()
|
void HTTPSClientSessionTest::testGetSmall()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/small");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -108,7 +108,7 @@ void HTTPSClientSessionTest::testGetSmall()
|
|||||||
void HTTPSClientSessionTest::testGetLarge()
|
void HTTPSClientSessionTest::testGetLarge()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -124,7 +124,7 @@ void HTTPSClientSessionTest::testGetLarge()
|
|||||||
void HTTPSClientSessionTest::testHead()
|
void HTTPSClientSessionTest::testHead()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large");
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -139,7 +139,7 @@ void HTTPSClientSessionTest::testHead()
|
|||||||
void HTTPSClientSessionTest::testPostSmallIdentity()
|
void HTTPSClientSessionTest::testPostSmallIdentity()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body\r\n0\r\n");
|
std::string body("this is a random request body\r\n0\r\n");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -156,7 +156,7 @@ void HTTPSClientSessionTest::testPostSmallIdentity()
|
|||||||
void HTTPSClientSessionTest::testPostLargeIdentity()
|
void HTTPSClientSessionTest::testPostLargeIdentity()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(8000, 'x');
|
std::string body(8000, 'x');
|
||||||
body.append("\r\n0\r\n");
|
body.append("\r\n0\r\n");
|
||||||
@ -174,7 +174,7 @@ void HTTPSClientSessionTest::testPostLargeIdentity()
|
|||||||
void HTTPSClientSessionTest::testPostSmallChunked()
|
void HTTPSClientSessionTest::testPostSmallChunked()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body("this is a random request body");
|
std::string body("this is a random request body");
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -192,7 +192,7 @@ void HTTPSClientSessionTest::testPostSmallChunked()
|
|||||||
void HTTPSClientSessionTest::testPostLargeChunked()
|
void HTTPSClientSessionTest::testPostLargeChunked()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
HTTPRequest request(HTTPRequest::HTTP_POST, "/echo");
|
||||||
std::string body(16000, 'x');
|
std::string body(16000, 'x');
|
||||||
request.setChunkedTransferEncoding(true);
|
request.setChunkedTransferEncoding(true);
|
||||||
@ -214,7 +214,7 @@ void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive()
|
|||||||
srv.start();
|
srv.start();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
s.setKeepAlive(true);
|
s.setKeepAlive(true);
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
@ -243,7 +243,7 @@ void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive()
|
|||||||
void HTTPSClientSessionTest::testKeepAlive()
|
void HTTPSClientSessionTest::testKeepAlive()
|
||||||
{
|
{
|
||||||
HTTPSTestServer srv;
|
HTTPSTestServer srv;
|
||||||
HTTPSClientSession s("localhost", srv.port());
|
HTTPSClientSession s("127.0.0.1", srv.port());
|
||||||
s.setKeepAlive(true);
|
s.setKeepAlive(true);
|
||||||
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1);
|
||||||
s.sendRequest(request);
|
s.sendRequest(request);
|
||||||
@ -359,7 +359,7 @@ void HTTPSClientSessionTest::testCachedSession()
|
|||||||
"");
|
"");
|
||||||
//pClientContext->enableSessionCache(true);
|
//pClientContext->enableSessionCache(true);
|
||||||
|
|
||||||
HTTPSClientSession s1("localhost", srv.port(), pClientContext);
|
HTTPSClientSession s1("127.0.0.1", srv.port(), pClientContext);
|
||||||
HTTPRequest request1(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request1(HTTPRequest::HTTP_GET, "/small");
|
||||||
s1.sendRequest(request1);
|
s1.sendRequest(request1);
|
||||||
Session::Ptr pSession1 = s1.sslSession();
|
Session::Ptr pSession1 = s1.sslSession();
|
||||||
@ -371,7 +371,7 @@ void HTTPSClientSessionTest::testCachedSession()
|
|||||||
StreamCopier::copyStream(rs1, ostr1);
|
StreamCopier::copyStream(rs1, ostr1);
|
||||||
assert (ostr1.str() == HTTPSTestServer::SMALL_BODY);
|
assert (ostr1.str() == HTTPSTestServer::SMALL_BODY);
|
||||||
|
|
||||||
HTTPSClientSession s2("localhost", srv.port(), pClientContext, pSession1);
|
HTTPSClientSession s2("127.0.0.1", srv.port(), pClientContext, pSession1);
|
||||||
HTTPRequest request2(HTTPRequest::HTTP_GET, "/small");
|
HTTPRequest request2(HTTPRequest::HTTP_GET, "/small");
|
||||||
s2.sendRequest(request2);
|
s2.sendRequest(request2);
|
||||||
Session::Ptr pSession2 = s2.sslSession();
|
Session::Ptr pSession2 = s2.sslSession();
|
||||||
|
@ -134,7 +134,7 @@ void HTTPSServerTest::testIdentityRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -157,7 +157,7 @@ void HTTPSServerTest::testChunkedRequest()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentType("text/plain");
|
request.setContentType("text/plain");
|
||||||
@ -181,7 +181,7 @@ void HTTPSServerTest::testIdentityRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -216,7 +216,7 @@ void HTTPSServerTest::testChunkedRequestKeepAlive()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
cs.setKeepAlive(true);
|
cs.setKeepAlive(true);
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1);
|
||||||
@ -251,7 +251,7 @@ void HTTPSServerTest::test100Continue()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
std::string body(5000, 'x');
|
std::string body(5000, 'x');
|
||||||
HTTPRequest request("POST", "/echoBody");
|
HTTPRequest request("POST", "/echoBody");
|
||||||
request.setContentLength((int) body.length());
|
request.setContentLength((int) body.length());
|
||||||
@ -275,7 +275,7 @@ void HTTPSServerTest::testRedirect()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/redirect");
|
HTTPRequest request("GET", "/redirect");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -295,7 +295,7 @@ void HTTPSServerTest::testAuth()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/auth");
|
HTTPRequest request("GET", "/auth");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
@ -315,7 +315,7 @@ void HTTPSServerTest::testNotImpl()
|
|||||||
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
HTTPServer srv(new RequestHandlerFactory, svs, pParams);
|
||||||
srv.start();
|
srv.start();
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", svs.address().port());
|
HTTPSClientSession cs("127.0.0.1", svs.address().port());
|
||||||
HTTPRequest request("GET", "/notImpl");
|
HTTPRequest request("GET", "/notImpl");
|
||||||
cs.sendRequest(request);
|
cs.sendRequest(request);
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
|
@ -48,7 +48,7 @@ void HTTPSStreamFactoryTest::testNoRedirect()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/large");
|
URI uri("https://127.0.0.1/large");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -61,7 +61,7 @@ void HTTPSStreamFactoryTest::testEmptyPath()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost");
|
URI uri("https://127.0.0.1");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -74,7 +74,7 @@ void HTTPSStreamFactoryTest::testRedirect()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/redirect");
|
URI uri("https://127.0.0.1/redirect");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
std::auto_ptr<std::istream> pStr(factory.open(uri));
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
@ -107,7 +107,7 @@ void HTTPSStreamFactoryTest::testError()
|
|||||||
{
|
{
|
||||||
HTTPSTestServer server;
|
HTTPSTestServer server;
|
||||||
HTTPSStreamFactory factory;
|
HTTPSStreamFactory factory;
|
||||||
URI uri("https://localhost/notfound");
|
URI uri("https://127.0.0.1/notfound");
|
||||||
uri.setPort(server.port());
|
uri.setPort(server.port());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -95,7 +95,7 @@ void TCPServerTest::testOneConnection()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
ss1.sendBytes(data.data(), (int) data.size());
|
ss1.sendBytes(data.data(), (int) data.size());
|
||||||
@ -123,7 +123,7 @@ void TCPServerTest::testTwoConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
SecureStreamSocket ss2(sa);
|
SecureStreamSocket ss2(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
@ -170,7 +170,7 @@ void TCPServerTest::testMultiConnections()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
SecureStreamSocket ss2(sa);
|
SecureStreamSocket ss2(sa);
|
||||||
SecureStreamSocket ss3(sa);
|
SecureStreamSocket ss3(sa);
|
||||||
@ -259,7 +259,7 @@ void TCPServerTest::testReuseSocket()
|
|||||||
assert (srv.queuedConnections() == 0);
|
assert (srv.queuedConnections() == 0);
|
||||||
assert (srv.totalConnections() == 0);
|
assert (srv.totalConnections() == 0);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa);
|
SecureStreamSocket ss1(sa);
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
ss1.sendBytes(data.data(), (int) data.size());
|
ss1.sendBytes(data.data(), (int) data.size());
|
||||||
@ -316,7 +316,7 @@ void TCPServerTest::testReuseSession()
|
|||||||
"");
|
"");
|
||||||
//pClientContext->enableSessionCache(true);
|
//pClientContext->enableSessionCache(true);
|
||||||
|
|
||||||
SocketAddress sa("localhost", svs.address().port());
|
SocketAddress sa("127.0.0.1", svs.address().port());
|
||||||
SecureStreamSocket ss1(sa, pClientContext);
|
SecureStreamSocket ss1(sa, pClientContext);
|
||||||
assert (!ss1.sessionWasReused());
|
assert (!ss1.sessionWasReused());
|
||||||
std::string data("hello, world");
|
std::string data("hello, world");
|
||||||
|
@ -121,7 +121,7 @@ void WebSocketTest::testWebSocket()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", ss.address().port());
|
HTTPSClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
@ -188,7 +188,7 @@ void WebSocketTest::testWebSocketLarge()
|
|||||||
|
|
||||||
Poco::Thread::sleep(200);
|
Poco::Thread::sleep(200);
|
||||||
|
|
||||||
HTTPSClientSession cs("localhost", ss.address().port());
|
HTTPSClientSession cs("127.0.0.1", ss.address().port());
|
||||||
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
|
||||||
HTTPResponse response;
|
HTTPResponse response;
|
||||||
WebSocket ws(cs, request, response);
|
WebSocket ws(cs, request, response);
|
||||||
|
@ -285,7 +285,11 @@ protected:
|
|||||||
p.setBaseName(clazz);
|
p.setBaseName(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __cplusplus < 201103L
|
||||||
std::auto_ptr<CodeWriter> pCodeWriter(createCodeWriter(page, clazz));
|
std::auto_ptr<CodeWriter> pCodeWriter(createCodeWriter(page, clazz));
|
||||||
|
#else
|
||||||
|
std::unique_ptr<CodeWriter> pCodeWriter(createCodeWriter(page, clazz));
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!_outputDir.empty())
|
if (!_outputDir.empty())
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@ Poco::Redis::Client RedisTest::_redis;
|
|||||||
|
|
||||||
RedisTest::RedisTest(const std::string& name):
|
RedisTest::RedisTest(const std::string& name):
|
||||||
CppUnit::TestCase("Redis"),
|
CppUnit::TestCase("Redis"),
|
||||||
_host("localhost"),
|
_host("127.0.0.1"),
|
||||||
_port(6379)
|
_port(6379)
|
||||||
{
|
{
|
||||||
if (!_connected)
|
if (!_connected)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user